我正在处理大量遗留代码,并且拥有大量 document.all 用法的实例。我需要用Microsoft支持的东西替换所有这些实例(批量)(因为我理解document.all 不再支持)。
用 document.getElementsByTagName() 替换document.all的所有实例是否安全?请记住,document.all可以有很多种类,比如document.all.item("")等。我需要知道document.getElementsByTag(' & #39;)可以作为盲目替换document.all的解决方案,无论在何处使用(无论采用何种形式)
答案 0 :(得分:4)
document.all
提供对ID为的所有元素的访问权限。这是一个传统的非标准接口,您应该使用document.getElementById()
方法。
因此,没有document.getElementsByTagName("*")
会返回更多元素,而不仅仅是带
这个定义意味着你可以做到
document.querySelectorAll('[id]'); // NodeList
MSDN has a different definition
所有集合为每个有效HTML标记包含一个元素对象。如果有效标记具有匹配的结束标记,则两个标记都由相同的元素对象表示。
在这种情况下,document.getElementsByTagName("*")
确实给出了类似的结果( HTMLCollection )
NodeList 将无法重现document.all.id_value
,document.all[id_value]
或document.all(foo)
的预期结果。
HTMLCollection 支持document.all.id_value
和document.all[id_value]
,如w3's DOM spec中所述,但我强烈建议不要使用其他方法,例如{{1} }}
实际上,您需要快速完成代码,以确保无论您选择哪种方式,它都能按预期工作。
答案 1 :(得分:0)
我可以使用document.getElementsByTagName('*')在我的整个项目中盲目地替换所有出现的document.all吗?
没有。 document.all
不是按标记名称的元素集合,它是由于各种原因而包含在其中的各种类型的元素的集合。其中一些原因是:
id
的元素。name
的部分元素。head
,body
和title
。因此,在此过程中必须有智慧。您可能会将document.all
的用法替换为:
document.getElementById
,返回单个元素,匹配id
的元素(如果文档无效且有多个匹配元素,则浏览器通常按文档顺序返回第一个元素) document.querySelector
,它返回文档中第一个匹配元素,用于任何有效的CSS选择器document.querySelectorAll
,它返回文档中匹配元素的列表,用于任何有效的CSS选择器(最后两个出现在所有现代浏览器中,还有IE8。)
示例:
找到<div id="foo">..</div>
元素:
document.getElementById("foo")
在文档中找到包含类bar
的第一个元素:
document.querySelector(".bar")
查找文档中的所有a
元素:
document.querySelectorAll("a")
参考文献: