如何创建一个包含html页面中所有textareas的所有名称(或ID)的数组?我试过这个,但它不起作用:
$arrayTextAreasNames = [];
var listFields = document.getElementsByTagName('*');
for(var i = 0; i < listFields.length; i++)
{
if(listFields[i].type == 'textarea')
{
$arrayTextAreasNames[] = listFields[i].name; //Empty!
}
}
答案 0 :(得分:3)
var listFields = document.getElementsByTagName('*');
您可以使用'textarea'
代替'*'
来避免过滤步骤。
listFields[i].type == 'textarea'
type
是<input>
个元素(在其他几个元素中)的属性。它没有描述元素类型。您正在寻找tagName
属性。
$arrayTextAreasNames[] = listFields[i].name; //Empty!
JavaScript不是PHP。您需要使用push
方法将数据添加到数组中,而不是将它们分配给未命名的属性。
var arrayTextAreasNames = [];
var listFields = document.getElementsByTagName('textarea');
for (var i = 0; i < listFields.length; i++) {
arrayTextAreasNames.push(listFields[i].name);
}
console.log(arrayTextAreasNames);
&#13;
<textarea name="foo"></textarea><textarea name="bar"></textarea>
&#13;
答案 1 :(得分:1)
您可以使用Array.prototype.map
或call
将apply
应用于HTMLCollection:
const t = document.getElementsByTagName('textarea');
// use 'map' for any iterable
const map = arr => fn => Array.prototype.map.call(arr, fn);
const names = map(t)(x => x.name);
const ids = map(t)(x => x.id);
console.log(names)
console.log(ids)
&#13;
<textarea name="one" id="1" cols="30" rows="10"></textarea>
<textarea name="two" id="2" cols="30" rows="10"></textarea>
<textarea name="three" id="3" cols="30" rows="10"></textarea>
<textarea name="four" id="4" cols="30" rows="10"></textarea>
<textarea name="five" id="5" cols="30" rows="10"></textarea>
&#13;
为旧浏览器交换const
到var
。
答案 2 :(得分:-1)
var tAreaList = [];
var tAreas = document.getElementsByTagName("textarea");
Array.prototype.slice.call(tAreas).forEach (function (tArea) {
tAreaList.push(tArea.id)
})
答案 3 :(得分:-2)
var listFields = document.getElementsByTagName('textarea');
阅读本文档了解更多信息
https://developer.mozilla.org/en-US/docs/Web/API/document/getElementsByTagName