Javascript 获取当前元素的字符串位置?

Javascript 获取当前元素的字符串位置?,javascript,jquery,html,Javascript,Jquery,Html,有没有办法获取jQuery所选元素相对于父元素的开始和结束的“.indexOf()”字符串位置 例如: <ul><li>Coffee</li><li>Coffee</li><li>Coffee</li></ul> 咖啡咖啡咖啡 通过jquery选择第二个项后,函数将返回15(或带有参数开关的29) 我正在考虑一个冗长的javascript解决方案,但它很快就会变得讨厌和不可靠。此外,如果中间混合了

有没有办法获取jQuery所选元素相对于父元素的开始和结束的“.indexOf()”字符串位置

例如:

<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中获得的任何内容都不匹配。