浏览器自动添加<;a>-不带JavaScript的标记
我只是在一个比下面的例子更大的网站上遇到了一个问题,这导致我调查了几个小时,直到找到了错误的原因。我的问题是,浏览器自动生成浏览器自动添加<;a>-不带JavaScript的标记,javascript,html,browser,hyperlink,inspector,Javascript,Html,Browser,Hyperlink,Inspector,我只是在一个比下面的例子更大的网站上遇到了一个问题,这导致我调查了几个小时,直到找到了错误的原因。我的问题是,浏览器自动生成 没有链接 有意思吧?浏览器在第一行正确地关闭-标记,并在div周围打开一个新标记。您可能会猜到我已经开始调试页面上的所有JavaScript(有很多),因为我认为JavaScript是从服务器获取页面后更改代码的唯一东西 好吧,现在我知道了,这不是唯一的事情。在尝试调试这个问题时,我在互联网上没有找到任何关于它的信息,因此我想我会在将来与有完全相同问题的人分享我的知识(
没有链接
有意思吧?浏览器在第一行正确地关闭
-标记,并在div周围打开一个新标记。您可能会猜到我已经开始调试页面上的所有JavaScript(有很多),因为我认为JavaScript是从服务器获取页面后更改代码的唯一东西
好吧,现在我知道了,这不是唯一的事情。在尝试调试这个问题时,我在互联网上没有找到任何关于它的信息,因此我想我会在将来与有完全相同问题的人分享我的知识(我们都知道:他很快就会出现)
但是,还有一个未解的问题:为什么?我看不出浏览器应该自动修复并创建新标记的原因。这对我来说没有意义 有两件事:
可能会被解释为尝试使用自动关闭的锚标记,因此实际上是一个新锚标记更多推测:这可能是一种依赖于浏览器的行为,与浏览器在表中自动创建
标记的原因有关。他们只是已经知道,如果没有
,网站作者打算使用
因此,一旦自动关闭的
出现,它就结束了未关闭的锚,并开始了一个新的锚。虽然
是一个容器,但它不能自动终止。锚点将根据XHTML规则结束,即在容器之前关闭包含的标记
这需要对HTML规范和个人浏览器行为进行大量查询。两件事:
可能会被解释为尝试使用自动关闭的锚标记,因此实际上是一个新锚标记更多推测:这可能是一种依赖于浏览器的行为,与浏览器在表中自动创建
标记的原因有关。他们只是已经知道,如果没有
,网站作者打算使用
因此,一旦自动关闭的
出现,它就结束了未关闭的锚,并开始了一个新的锚。虽然
是一个容器,但它不能自动终止。锚点将根据XHTML规则结束,即在容器之前关闭包含的标记
这需要对HTML规范和个别浏览器行为进行大量查询。实际问题应该是,为什么要故意向浏览器提供无效的HTML 但回到话题上来。历史上,HTML一直是一种不稳定的标记语言。没有DOM概念的人会编写HTML,例如:
<B><U>hi, </B> shall I be underlined or not?</U>
嗨,我该不该加下划线?
上述内容显然是无效的HTML。但是,如果你给浏览器添加了无效的HTML,它就不会呕吐。它将尝试以其认为作者意图的方式恢复文档
DOM中的元素(这是inspector显示给您的)只能有一个父元素。因此,从逻辑上讲,必须先关闭
,然后才能关闭
。但是作者尚未关闭
,因此浏览器假定文本的其余部分也应加下划线。因此,无效的HTML将恢复为大约以下DOM结构:
<B><U>hi, </U></B><U> shall I be underlined or not?</U>
嗨,我该不该加下划线?
在您的特定情况下,
标记不能在HTML中自动关闭,因此:
<a>...<a/>
。。。
/
被解释为语法糖,浏览器认为您在没有关闭第一个元素的情况下打开了第二个
元素。它很可能会在整个文档中生成锚元素,直到在恢复过程中遇到必要的关闭。实际问题应该是,为什么要故意向浏览器提供无效的HTML
但回到话题上来。历史上,HTML一直是一种不稳定的标记语言。没有DOM概念的人会编写HTML,例如:
<B><U>hi, </B> shall I be underlined or not?</U>
嗨,我该不该加下划线?
上述内容显然是无效的HTML。但是,如果你给浏览器添加了无效的HTML,它就不会呕吐。它将尝试以其认为作者意图的方式恢复文档
DOM中的元素(这是inspector显示给您的)只能有一个父元素。因此,从逻辑上讲,必须先关闭
,然后才能关闭
。但是作者尚未关闭
,因此浏览器假定文本的其余部分也应加下划线。因此,无效的HTML将恢复为大约以下DOM结构:
<B><U>hi, </U></B><U> shall I be underlined or not?</U>
嗨,我该不该加下划线?
在您的特定情况下,
标记不能在HTML中自动关闭,因此:
<a>...<a/>
。。。
/
被解释为语法糖,浏览器认为您在没有关闭第一个元素的情况下打开了第二个
元素。它很可能会在整个文档中生成锚元素,直到在恢复过程中遇到必要的关闭
。对此的唯一解释是解析分两步进行。首先是某种“标记汤”模式,浏览器试图关闭所有打开的内容。之后(当站点加载完成时),解析器标记(X)HTML并发现输入错误的结束标记。它假定这是一个和fi