基本场景:我在HTML页面上有一系列动态生成的元素。 (目前,他们都是divs
,但他们不需要。)
我想要的是一个javascript函数,它将遍历所有divs
(或其他)寻找特定值的存在。
最好的,最跨浏览的方式是什么? getElementsByName()是否适用于所有浏览器中的divs
?我可以给他们所有相同的ID并以某种方式从getElementById中获取一个数组吗?
如果我将divs
更改为spans
或inputs
,这会让事情变得更容易吗?
谢谢!
(编辑:对于这个项目来说,如果有一个没有使用任何外部js库的解决方案,那将是最好的。我假设jQuery有一个函数在一行中做到这一点,但目前我想避免与客户打开那些蠕虫病毒。)
答案 0 :(得分:3)
getElementsByTagName
在DOM Core中定义,因此任何实现它的浏览器都可以。这是当前使用的每个浏览器。
在这里详细说明:http://www.quirksmode.org/dom/w3c_core.html
要知道的是getElementsByTagName
返回NodeList
- 而不是数组。它的工作方式相同,但它的评估很晚,所以如果你在遍历NodeList
时向DOM添加/删除节点,你会得到奇怪的结果。在这些情况下,写两个循环;首先遍历NodeList
并将所有条目存储在数组中 - 然后遍历数组。
答案 1 :(得分:2)
元素是什么并不重要,但重要的是它们在页面中的位置。如果它们都是单个父元素的子元素,那么问题很简单。为父元素提供一个ID,您可以使用getElementById()
来获取它并迭代其子元素。
getElementById()
行为未定义。大多数人会返回他们能找到的第一个元素,但你肯定无法获得阵列。
getElementsByTagName()
只有在您可以使用一些您确定不会出现在页面其他位置的晦涩标记时才会起作用。您可以通过指定您感兴趣的元素将具有可以检查的属性(例如@class或@title)来扩充此功能。然后,您可以遍历getElementsByTagName()
检查此结果,并仅查看属性所在的元素。
答案 2 :(得分:1)
您可以使用this网站查看getElementBy最符合您需求的套件 有一些使用库,有些像 troelskn 一样,在所有支持的浏览器中都适用于标准的javascript。