我正在开发一个函数来查找另一个元素标识符中的特定元素(类似于getElementById但适用于任何其他元素)...因为这会引发我的反恐:
var ancestor = document.getElementById('divAncestor');
var child = ancestor.getElementById('divChild');
我知道,HTML指定id必须是唯一的,但实际证明经常运行可以包含具有相同ID的项目的脚本。所以,这就是为什么我不是简单地这样叫孩子的原因:
var ancestor = document.getElementById('divChild');
第一个选项是将此函数添加到每个HTML元素,或至少div(因为这是我感兴趣的东西)。第二个,也就是我喜欢的那个,就是在dom文档中添加一个方法,然后通过传递父子ID作为参数来调用它。
这可能吗?
感谢您的时间。
答案 0 :(得分:2)
使用此:
document.querySelector("div#divAncestor div#divChild");
这会使div
id="divChild"
中div
的第一个id="divAncestor"
获得document.querySelectorAll("div#divAncestor div#divChild");
虽然ID的 必须 是唯一的,但根据规范,确实可能它们不是。
(浏览器处理得很好)
虽然您的优先级“应该”以防止这种情况发生,但上面的代码可以正常工作。
如果有多个祖先或孩子,这应该有效:
div.className
<强> Fiddle Example 强>
这些querySelectors的工作方式与css选择器类似。选择以下类:div, p, h1
,多个元素,如:{{1}}等等。
答案 1 :(得分:1)
不用非独特的ID讨论波什,我会回答你的实际问题:
是否可以向DOM文档添加方法?
是的,请参阅How to extend the DOM with JS。但是不要这样做!在Kangax的文章What’s wrong with extending the DOM中很好地讨论了这些原因。
第二种方法是在dom文档中添加一个方法,并通过传递父子ID作为参数从那里调用。
你可以这样做,是的,不会造成太大的伤害。我猜它在所有浏览器中运行良好,因为无论如何使用静态函数都不会有垃圾收集问题。
然而,我看不出有充分理由这样做。听起来我喜欢滥用document
变量作为命名空间,而任何其他全局变量或命名空间对象也会这样做。为了不创建可能的(未来)冲突,专用命名空间将是更好的选择。