我可以盲目地将整个项目中出现的所有 document.all 替换为 document.getElementsByTagName('*') 吗?
Can I blindly replace all occurrences of document.all in my entire project with document.getElementsByTagName('*')?
我正在处理大量遗留代码,并且有大量 document.all 用法实例。我需要用 Microsoft 支持的东西替换所有这些实例(批量)(据我所知 document.all 不再受支持)。
将 document.all 的所有实例替换为 document.getElementsByTagName() 是否安全?请记住 document.all 可以有多种形式,例如 document.all.item("") 等。我需要知道 document.getElementsByTag('') 是否会作为盲目替换 document.all 的解决方案,无论它在哪里使用(以任何形式)
document.all
Provides access to all elements with an id. This is a legacy, non-standard, interface and you should use the document.getElementById()
method instead.
因此,除了具有 id
的 个元素之外,document.getElementsByTagName("*")
不会 return 个元素
这个定义意味着你可以做到
document.querySelectorAll('[id]'); // NodeList
但是
MSDN has a different definition
The all collection includes one element object for each valid HTML tag. If a valid tag has a matching end tag, both tags are represented by the same element object.
在这种情况下,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 中所述,尽管我强烈建议不要使用此方法而不是其他方法比如getElementById
真的,您将不得不快速检查代码,以确保无论您选择哪种替代方案,它都能按预期工作。
Can I blindly replace all occurrences of document.all in my entire project with document.getElementsByTagName('*')?
没有。 document.all
不是标签名称的元素集合,它是出于各种原因包含在其中的各种类型的元素的集合。其中一些原因是:
- 包含
id
的元素。
- 还包括一些
name
的元素。
- 包括
head
、body
和 title
。
所以在这个过程中必须要有智慧。您可能会将 document.all
的用法替换为:
document.getElementById
,其中return是单个元素,匹配id
的元素(如果文档无效且有多个匹配元素,浏览器通常return 他们中的第一个在文档顺序中)
document.querySelector
,其中 return 是文档中任何有效 CSS 选择器 的第一个匹配元素
document.querySelectorAll
,其中 return 是文档中任何有效 CSS 选择器 的匹配元素列表
(最后两个存在于所有现代浏览器中,IE8 也存在。)
示例:
找到 <div id="foo">..</div>
元素:
document.getElementById("foo")
在文档中查找第一个带有class bar
的元素:
document.querySelector(".bar")
查找文档中的所有 a
个元素:
document.querySelectorAll("a")
参考文献:
我正在处理大量遗留代码,并且有大量 document.all 用法实例。我需要用 Microsoft 支持的东西替换所有这些实例(批量)(据我所知 document.all 不再受支持)。
将 document.all 的所有实例替换为 document.getElementsByTagName() 是否安全?请记住 document.all 可以有多种形式,例如 document.all.item("") 等。我需要知道 document.getElementsByTag('') 是否会作为盲目替换 document.all 的解决方案,无论它在哪里使用(以任何形式)
document.all
Provides access to all elements with an id. This is a legacy, non-standard, interface and you should use thedocument.getElementById()
method instead.
因此,除了具有 id
的 个元素之外,document.getElementsByTagName("*")
不会 return 个元素
这个定义意味着你可以做到
document.querySelectorAll('[id]'); // NodeList
但是
MSDN has a different definition
The all collection includes one element object for each valid HTML tag. If a valid tag has a matching end tag, both tags are represented by the same element object.
在这种情况下,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 中所述,尽管我强烈建议不要使用此方法而不是其他方法比如getElementById
真的,您将不得不快速检查代码,以确保无论您选择哪种替代方案,它都能按预期工作。
Can I blindly replace all occurrences of document.all in my entire project with document.getElementsByTagName('*')?
没有。 document.all
不是标签名称的元素集合,它是出于各种原因包含在其中的各种类型的元素的集合。其中一些原因是:
- 包含
id
的元素。 - 还包括一些
name
的元素。 - 包括
head
、body
和title
。
所以在这个过程中必须要有智慧。您可能会将 document.all
的用法替换为:
document.getElementById
,其中return是单个元素,匹配id
的元素(如果文档无效且有多个匹配元素,浏览器通常return 他们中的第一个在文档顺序中)document.querySelector
,其中 return 是文档中任何有效 CSS 选择器 的第一个匹配元素
document.querySelectorAll
,其中 return 是文档中任何有效 CSS 选择器 的匹配元素列表
(最后两个存在于所有现代浏览器中,IE8 也存在。)
示例:
找到 <div id="foo">..</div>
元素:
document.getElementById("foo")
在文档中查找第一个带有class bar
的元素:
document.querySelector(".bar")
查找文档中的所有 a
个元素:
document.querySelectorAll("a")
参考文献: