1

var fieldsettags = document.getElementsByTagName('fieldset');
textareatags = new Array();
internalarray = new Array();
for (var x = 0; x < fieldsettags.length; x++) {
  for (var y = 0; y < fieldsettags[x].childNodes.length; y++) {
    if (fieldsettags[x].getElementsByTagName('textarea')[y]) {
      internalarray.push(fieldsettags[x].getElementsByTagName('textarea')[y]);
    }
  }
  textareatags.push(internalarray);
  internalarray = [];
}
<fieldset>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
</fieldset>

There are many fieldset tags inside my document, here is only one example for imagination. I want to have only textarea elements inside an array. Where am I going wrong? Remember inside each fieldset tag, the order and no. of elements is also different. Do you suggest any other method for getting them?

Vivek Jain
  • 2,730
  • 6
  • 12
  • 27

2 Answers2

0

Spread each fieldsets seen into an array, then map that array to each of its textarea descendants:

const textareatags = [...document.querySelectorAll('fieldset')]
  .map(fieldset => [...fieldset.querySelectorAll('textarea')]);
console.log(textareatags);
<fieldset>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>
  <legend>something</legend><textarea>something</textarea><span>somethings</span>
  <div>something</div>



</fieldset>
CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
0

You may want something like this:

const fieldSets= [...document.querySelectorAll('fieldset')];
const finalArray = [];

fieldSets.forEach((fieldSet) => {
    const textAreas = [...fieldSet.querySelectorAll('textarea')];
    finalArray.push(textAreas)
});
console.log(finalArray);
Manuel Cheța
  • 480
  • 2
  • 10