【发布时间】:2021-10-02 15:59:38
【问题描述】:
我正面临着一个我将其归结为 MWE 的奇怪问题。我不是这方面的专家,如果很明显,请见谅。
我有这个 HTML 文档:
var floats = document.getElementsByTagName("custom-float");
for (var i = 0; i < floats.length; i++) {
var caption = floats[i].getElementsByTagName("float-caption");
if (caption.length == 0) {
throw 'This float has no caption!';
}
}
<p>
A paragraph.
<custom-float>
<div style="display: flex;">
<image src="1.svg"></image>
</div>
<float-caption>A description of the image.</float-caption>
</custom-float>
</p>
由于某种原因,当我打开 HTML(在 Firefox 90.0 和 Linux 中的 Brave 1.26.77 中)时,会引发 This float has no caption! 错误,因此这意味着 getElementsByTagName 没有返回 float-caption 元素。
令我惊讶的是,我注意到如果我删除 <div style="display: flex;"></div> 包装器和/或如果我将 </p> 放在 <custom-float> 之前,一切都会按预期工作。 IE。以下两个 HTML 文档可以正常工作:
var floats = document.getElementsByTagName("custom-float");
for (var i = 0; i < floats.length; i++) {
var caption = floats[i].getElementsByTagName("float-caption");
if (caption.length == 0) {
throw 'This float has no caption!';
}
}
<p>
A paragraph.
<custom-float>
<image src="1.svg"></image>
<float-caption>A description of the image.</float-caption>
</custom-float>
</p>
var floats = document.getElementsByTagName("custom-float");
for (var i = 0; i < floats.length; i++) {
var caption = floats[i].getElementsByTagName("float-caption");
if (caption.length == 0) {
throw 'This float has no caption!';
}
}
<p>
A paragraph.
</p>
<custom-float>
<div style="display: flex;">
<image src="1.svg"></image>
</div>
<float-caption>A description of the image.</float-caption>
</custom-float>
【问题讨论】:
-
<div>不是<p>的有效子代。你的 MWE 应该是<p><div>test</div></p>和document.getElementsByTagName('p')[0].getElementsByTagName('div')才能发现它不存在。 -
<p><div></div></p>不是有效的 HTML。您不能将<div>放入<p>并从各种浏览器获得一致的结果。为浏览器提供有效的 HTML,它们会表现得更好。
标签: javascript html getelementsbytagname