如果javascript上只有部分名称,您可以获取ElementsByName吗?
我有一个重复表,其中元素的名称是(例如“tdName_1”“tdName_2”),我想知道是否可以获取elementsbyname(“tdName_”) PS:我不能使用Jquery 提前谢谢如果javascript上只有部分名称,您可以获取ElementsByName吗?,javascript,html,Javascript,Html,我有一个重复表,其中元素的名称是(例如“tdName_1”“tdName_2”),我想知道是否可以获取elementsbyname(“tdName_”) PS:我不能使用Jquery 提前谢谢 塞萨尔。这是不可能的。在本回答的其余部分中,我假设您感兴趣的元素是s。如果是这样,那么您应该知道name属性对于元素无效 您必须手动创建匹配元素的列表。如果您决定使用名称属性(而不是在类属性中添加类),则以下操作将起作用: var table = document.getElementById("your
塞萨尔。这是不可能的。在本回答的其余部分中,我假设您感兴趣的元素是
s。如果是这样,那么您应该知道name
属性对于
元素无效
您必须手动创建匹配元素的列表。如果您决定使用名称
属性(而不是在类
属性中添加类),则以下操作将起作用:
var table = document.getElementById("your_table_id");
var tds = table.getElementsByTagName("td");
var matchingTds = [];
for (var i = 0, len = tds.length, td, tdName; i < len; ++i) {
td = tds[i];
tdName = td.getAttribute("name");
if (tdName && tdName.indexOf("tdName_") == 0) {
matchingTds.push(td);
}
}
var table=document.getElementById(“您的表id”);
var tds=table.getElementsByTagName(“td”);
var matchingTds=[];
对于(变量i=0,len=tds.length,td,tdName;i
AFAIK,getElementsByName
需要一个静态字符串作为参数
我不知道您是否可以控制这些元素,但您可能应该给它们相同的名称并使用getElementsByName
另一种解决方案是循环遍历名称并使用
getElementByName('tdName_'+i)
不,您必须获取所有相关元素(例如,使用)并循环遍历它们,直到找到一个或多个符合条件的元素
也许您可以使用并提供您想要匹配某个类的每个元素?(更新,本机版本不可用,因此,感谢Andy E。这是一个非常流行的解决方案实现。)
你说你不能使用JQuery,我相信你有一个很好的理由,但是像这样的东西就是框架的用途。原型还是MooTools是一种选择 使用
getElementsByClassName
不容易,也可能不可能,但您可以将JQuery置于rescue:
$('td[name=tdName_1]') // matches exactly 'tdName_1'
$('td[name^=tdName]') // matches those that begin with 'tdName'
显然不是。但您可以使用getElementsByTagName()然后按名称筛选:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript"><!--
function find(){
var inputs = document.getElementById("foo").getElementsByTagName("input");
var found = [];
for(var i=0, len=inputs.length; i<len; i++){
if(inputs[i].name.match(/^tdName_\d+$/)){
found.push(inputs[i]);
}
}
alert(found.length + " elements found");
}
//--></script>
</head>
<body>
<form action="" method="post" id="foo">
<input type="text" name="tdName_1">
<input type="text" name="tdName_2">
<input type="text" name="tdName_3">
<input type="text" name="not_me">
<input type="text" name="tdName_4">
<input type="text" name="neither_me">
<input type="text" name="tdName_5">
<input type="button" onclick="find()" value="Find">
</form>
</body>
</html>
正如Tim Down所说,
name
属性对于
元素无效。如果你决定使用它,它应该仍然有效。一个选项是使用while循环,如下所示:
function getAllNamedTDs ()
{
var cTD, i=1, elArr = [];
// If an element with "tdName_"+i is not found, exit the loop
while (cTD = document.getElementByName("tdName_"+(i++)))
elArr.push(cTD);
// return the array of elements or null if no elements were found.
return elArr.length ? elArr : null;
}
与使用
name
属性不同,您应该使用id
属性,然后将getElementByName
替换为getElementById
,使用普通javascript,您可以使用querySelectorAll方法:
document.querySelectorAll('[name^=tdName]')
这应该适用于所有现代浏览器,包括IE9或更高版本(尽管我还没有测试过它)。在您要查找的每个元素上放置两(2)个名称。。。使每个元素上的第一个类名相同,第二个类名为“tdName_1”或“tdName_2”(或其他任何名称)。在所有元素共用的类名上运行document.getElementsByClassName。。。然后在数组中循环,执行className.split(“”)以获得一个数组,其中数组[0]是公共名称,数组[1]是区分名称,并且。。。执行所需操作…不幸的是,
GetElementsByCassName
在IE中不可用:-(getElementsByTagName
可能是最好的选择。如果元素的名称像'tdName_1',谢谢Tim,我不知道name属性对td标签无效。请投你的票。答案有点旧,仍然有效,但可能会添加一些函数编程,因为大多数浏览器现在都支持[].filter
var table=document.getElementById(“您的表”\u id”);var tds=table.getElementsByTagName(“td”);var matchingds=tds.filter(函数(td){tdName=td.getAttribute(“name”);return(tdName&&tdName.indexOf(“tdName”)==0);)
@nickytonline:大多数浏览器确实支持数组上的过滤器,但是getElementsByTagName()
不返回数组;它返回一个HTMLCollection
,它没有filter
方法。您可以执行类似var matchingTds=[].filter.call(table.getElementsByTagName(“td”)的操作,函数(td){…})
。@tim down,correct,my bad。这就是我在没有完全测试我的建议的情况下进行评论时发生的情况;)我在Chrome开发工具中看到了[]
,所以只是假设数组,但正如您所提到的,实际上它是一个节点集合;)引用问题:PS:我不能使用Jquery。
@Andy:是的,我没有注意到,但他总有一天会使用Jquery,而Jquery对于某些问题来说非常方便。