Javascript 获取当前元素的字符串位置?
有没有办法获取jQuery所选元素相对于父元素的开始和结束的“.indexOf()”字符串位置 例如:Javascript 获取当前元素的字符串位置?,javascript,jquery,html,Javascript,Jquery,Html,有没有办法获取jQuery所选元素相对于父元素的开始和结束的“.indexOf()”字符串位置 例如: <ul><li>Coffee</li><li>Coffee</li><li>Coffee</li></ul> 咖啡咖啡咖啡 通过jquery选择第二个项后,函数将返回15(或带有参数开关的29) 我正在考虑一个冗长的javascript解决方案,但它很快就会变得讨厌和不可靠。此外,如果中间混合了
<ul><li>Coffee</li><li>Coffee</li><li>Coffee</li></ul>
- 咖啡
- 咖啡
- 咖啡
通过jquery选择第二个
项后,函数将返回15(或带有参数开关的29)
我正在考虑一个冗长的javascript解决方案,但它很快就会变得讨厌和不可靠。此外,如果中间混合了其他标记类型或文本,则可能不起作用。糟糕。不要当真
//http://stackoverflow.com/a/14482123
function nthIndex(str, pat, n){
var L= str.length, i= -1;
while(n-- && i++<L){
i= str.indexOf(pat, i);
}
return i;
}
function strpos(jelem, tag) {
var nth = jelem.index();
var contents = jelem.parent().text();
var pos = nthIndex(contents, tag, nth+1);
if (tag.indexOf('/') == 1) {
return pos+4; //because ending of '</li>' is +4 (very bad)
} else {
return pos;
}
}
strpos(jelem, '<li>'); //or '</li>' to return the ending position
//http://stackoverflow.com/a/14482123
函数索引(str,pat,n){
var L=str.length,i=-1;
虽然(n--&&i++像adeneo说的,这似乎是一个XY问题,但您确实需要一个解析器,我怀疑您是否愿意编写自己的解析器
一种可能是使用本机.outerHTML
并将所有.previousSibling
节点的.length
相加,然后在需要结束位置时将当前节点的.length
相加
但是,您应该知道,这与原始HTML无关。这些将是浏览器在分析DOM的当前状态后呈现的HTML字符串
下面是一个接收元素并返回开始(或结束)位置的快速示例:
函数getPos(origElem,doEnding){
var总和=0;
var elem=初始值;
while((elem=elem.previousSibling)){
总和+=元素外部长度;
}
if(doEnding){
总和+=origElem.outerHTML.length-1;
}
回报金额;
}
var li=document.querySelector(“li:n个子(2)”;
var p=文件查询选择器(“pre”);
p、 textContent=“位置为:”+getPos(li);
p、 textContent+=“\n位置为:“+getPos(li,true);
- 咖啡
- 咖啡
- 咖啡
只是好奇,这是用来做什么的?你到底为什么需要HTML标记的字符串位置,包括内容等?我认为这是一个X/Y问题!一旦原始HTML标记被解析并创建DOM,原始文本就没有真正的用处了。@squint基本上我有一个带预览的HTML文本编辑器,我想它会有用的这是一个不错的添加,可以显示信息,例如预览中悬停元素的原始html中的字符串位置,还可以突出显示引用该元素的原始html部分。是的,问题是除非您自己编写渲染器,否则它会丢弃原始html,因此您的目标html为highli光照可能与您从预览的DOM中获得的任何内容都不匹配。