是否可以向DOM文档添加方法?

时间:2012-12-14 15:04:09

标签: javascript methods domdocument

我正在开发一个函数来查找另一个元素标识符中的特定元素(类似于getElementById但适用于任何其他元素)...因为这会引发我的反恐:

var ancestor = document.getElementById('divAncestor');
var child = ancestor.getElementById('divChild');

我知道,HTML指定id必须是唯一的,但实际证明经常运行可以包含具有相同ID的项目的脚本。所以,这就是为什么我不是简单地这样叫孩子的原因:

var ancestor = document.getElementById('divChild');

第一个选项是将此函数添加到每个HTML元素,或至少div(因为这是我感兴趣的东西)。第二个,也就是我喜欢的那个,就是在dom文档中添加一个方法,然后通过传递父子ID作为参数来调用它。

这可能吗?

感谢您的时间。

2 个答案:

答案 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变量作为命名空间,而任何其他全局变量或命名空间对象也会这样做。为了不创建可能的(未来)冲突,专用命名空间将是更好的选择。