我正在尝试编写一个jQuery或纯JavaScript函数(更喜欢可读性更强的解决方案),可以计算HTML文档中起始标签或结束标签的长度。
例如:
会返回起始标签长度为3,结束标签长度为4。添加属性,
最终结果为起始标签长度为18,结束标签长度为7。
会返回起始标签长度为23,结束标签长度为0(或-1)。
我正在寻找一种规范的、保证按照规范工作的解决方案,因此我尝试使用 DOM 方法而不是手动文本操作。例如,我希望该解决方案即使对于奇怪的情况也能正常工作,比如:
这段文字的英译中文如下:
我查看了jQuery API(特别是Manipulation部分,包括DOM Insertion和General Attributes子部分),但是我没有看到任何有用的内容。
目前,我能想到的最好的主意是针对一个元素
当然,我不想对结束标记做出这样的假设。
(最后,我熟悉正则表达式——但尽可能地避免使用它们。)
编辑 @Pointy和@squint帮助我理解,例如无法看到
例如:
<p>Hello.</p>
会返回起始标签长度为3,结束标签长度为4。添加属性,
<span class="red">Warning!</span>
最终结果为起始标签长度为18,结束标签长度为7。
<img src="foobar.png"/>
会返回起始标签长度为23,结束标签长度为0(或-1)。
我正在寻找一种规范的、保证按照规范工作的解决方案,因此我尝试使用 DOM 方法而不是手动文本操作。例如,我希望该解决方案即使对于奇怪的情况也能正常工作,比如:
<p>spaces infiltrating the ending tag</ p >
并且
<img alt="unended singleton tags" src="foobar.png">
这段文字的英译中文如下:
等等。也就是说,只要我们使用正确的 DOM 方法,我们应该能够找到在任何情况下位于 <
和 >
之间的字符数,即使情况再怎么奇怪。
<div data-tag="<div>">HTML-like strings within attributes</div>
我查看了jQuery API(特别是Manipulation部分,包括DOM Insertion和General Attributes子部分),但是我没有看到任何有用的内容。
目前,我能想到的最好的主意是针对一个元素
node
:lengthOfEndTag = node.tagName.length + 3;
lengthOfStartTag = node.outerHTML.length
- node.innerHTML.length
- lengthOfEndTag;
当然,我不想对结束标记做出这样的假设。
(最后,我熟悉正则表达式——但尽可能地避免使用它们。)
编辑 @Pointy和@squint帮助我理解,例如无法看到
</ p >
,因为一旦创建DOM,HTML将被丢弃。没关系。调整后的目标是找到开始和结束标签的长度,就像在outerHTML
中呈现的那样。
outerHTML
提供的HTML。那就足够了。(我会编辑我的问题。) - Andrew Cheong