我有一个div,并且我有一些未定义级别的子节点。
现在我必须将每个元素的ID更改为一个div。如何实现?
我想,因为他们有上传ID,所以如果父亲是id ='path_test_maindiv'那么下一个下行者将是'path_test_maindiv_child',因此我想,我会通过通配符解决这个问题,例如:
document.getElementById('path_test_*')
这可能吗?或者还有其他方法吗?
答案 0 :(得分:27)
不是原生JavaScript。您有多种选择:
1)放一个类并使用getElementsByClassName但it doesn't work in every browser。
2)自己动手。类似的东西:
function getElementsStartsWithId( id ) {
var children = document.body.getElementsByTagName('*');
var elements = [], child;
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
if (child.id.substr(0, id.length) == id)
elements.push(child);
}
return elements;
}
3)使用库或CSS选择器。像jQuery;)
答案 1 :(得分:21)
在其中一条评论中你说:
(...)IE无论如何被禁止在我的页面上,因为他没有用CSS获取它。它是开发人员的管理工具,所以只有少数人,他们无论如何都会使用FF
我认为你应该从一开始就采用不同的方法,但是对于它的价值,在较新的浏览器中(ok,FF3.5),你可以使用document.querySelectorAll()
来获得类似的结果,比如jQuery :
var elements = document.querySelectorAll('[id^=foo]');
// selects elements which IDs start with foo
更新: querySelectorAll()
仅为not supported in IE < 8 and FF 3.0。
答案 2 :(得分:11)
jQuery允许您查找特定属性以特定值开头的元素
在jQuery中你会使用
$('[id^="path_test_"]')
答案 3 :(得分:0)
我认为getelementById中不允许使用通配符。 相反,您可以使用以下命令获取相应DIV的所有子节点:
var childNodeArray = document.getElementById('DIVID').childNodes;
这将为您提供DIV内所有元素的数组。现在使用for
循环,您可以遍历所有子元素,同时可以检查元素或ID或NAME的类型,如果匹配,则根据需要进行更改。
答案 4 :(得分:0)
您不应将元素的ID更改为其他现有元素的ID。这是非常错误的,所以你最好在继续之前重新思考你的核心逻辑。
你准备做什么?
无论如何,要获取所有带有ID的元素,请按照之前的建议使用jQuery,如果不能,也可以使用纯JavaScript,请告诉我们。
答案 5 :(得分:0)
在2019年将其作为通配符尝试。
document.querySelectorAll("[id*=path_test_]")