javascript – 如何找到起始标记或结束标记的(字符串)长度?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何找到起始标记或结束标记的(字符串)长度?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2256字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何找到起始标记或结束标记的(字符串)长度?](/upload/InfoBanner/zyjiaocheng/770/c80f871f6f964f0ba95c3c287b6dda6e.jpg)
我正在尝试编写一个jQuery或纯Javascript函数(更喜欢更易读的解决方案),它可以计算HTML文档中起始标记或结束标记的长度.
例如,
<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子部分),但我没有看到任何有用的东西.
鉴于元素节点,我目前最好的想法是
lengthOfEndTag = node.tagName.length + 3;
lengthOfStartTag = node.outerHTML.length
- node.innerHTML.length
- lengthOfEndTag;
但是我当然不希望对结束标记做出这样的假设.
(最后,我熟悉正则表达式 – 但是如果可能的话,尽量避免使用它们.)
编辑
@Pointy和@squint帮助我理解,例如,不可能看到< / p>,因为一旦创建了DOM就会丢弃HTML.没关系.调整后的目标是找到在outerHTML中呈现的开始和结束标记的长度.
解决方法:
另一种方法是在节点的克隆副本(id设置)上使用XMLSerializer的serializeToString,以避免必须解析innerHTML,然后拆分“><”
var tags = (function () {
var x = new XMLSerializer(); // scope this so it doesn't need to be remade
return function tags(elm) {
var s, a, id, n, o = {open: null, close: null}; // spell stuff with var
if (elm.nodeType !== 1) throw new TypeError('Expected HTMLElement');
n = elm.cloneNode(); // clone to get rid of innerHTML
id = elm.getAttribute('id'); // re-apply id for clone
if (id !== null) n.setAttribute('id', id); // if it was set
s = x.serializeToString(n); // serialise
a = s.split('><');
if (a.length > 1) { // has close tag
o.close = '<' + a.pop();
o.open = a.join('><') + '>'; // join "just in case"
}
else o.open = a[0]; // no close tag
return o;
}
}()); // self invoke to init
运行此命令后,您可以访问.length的打开和关闭属性
tags(document.body); // {open: "<body class="question-page">", close: "</body>"}
如果属性的值具有><在里面? XMLSerializer将此转义为& gt;& lt;所以它不会改变.split.
怎么没有关闭标签? close将为null.
内容总结
以上是互联网集市为您收集整理的javascript – 如何找到起始标记或结束标记的(字符串)长度?全部内容,希望文章能够帮你解决javascript – 如何找到起始标记或结束标记的(字符串)长度?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。