如果javascript上只有部分名称,您可以获取ElementsByName吗?

如果javascript上只有部分名称,您可以获取ElementsByName吗?,javascript,html,Javascript,Html,我有一个重复表,其中元素的名称是(例如“tdName_1”“tdName_2”),我想知道是否可以获取elementsbyname(“tdName_”) PS:我不能使用Jquery 提前谢谢 塞萨尔。这是不可能的。在本回答的其余部分中,我假设您感兴趣的元素是s。如果是这样,那么您应该知道name属性对于元素无效 您必须手动创建匹配元素的列表。如果您决定使用名称属性(而不是在类属性中添加类),则以下操作将起作用: var table = document.getElementById("your

我有一个重复表,其中元素的名称是(例如“tdName_1”“tdName_2”),我想知道是否可以获取elementsbyname(“tdName_”)

PS:我不能使用Jquery

提前谢谢


塞萨尔。

这是不可能的。在本回答的其余部分中,我假设您感兴趣的元素是
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对于某些问题来说非常方便。