如何将“indexOf”作为<p>中的元素? (jquery的)

时间:2016-01-18 21:35:36

标签: javascript jquery

我只是想在段落中获取标记元素(标记)的索引位置。 例如:

$zip = new ZipArchive();
$res = $zip->open('test.zip', ZipArchive::CHECKCONS);
if ($res !== TRUE) {
    switch($res) {
        case ZipArchive::ER_NOZIP:
            die('not a zip archive');
        case ZipArchive::ER_INCONS :
            die('consistency check failed');
        case ZipArchive::ER_CRC :
            die('checksum failed');
        default:
            die('error ' . $res);
    }
}

我试图在div中模拟“ ctrl + f ”功能。所以即时通讯使用名为 textselect 的插件来选择/突出显示 我的搜索结果:

<p>
   Lorem ipsum dolor ipsum sit <mark>amet</mark>
   consectetur adipisicing elit, sed <mark>amet</mark> 
</p>

但我不知道如何才能获得 startposition ...

我试过了:

var startPosition = textHolder.indexOf(textToSelect);
var endPosition = startPosition + textToSelect.length;

$.textSelect('setRange', {
                        start: startPosition,
                        startElement: $("p"),
                        end : endPosition,
                        endElement : $("p")
                    });

并返回34这将是第一个标记的起始位置,但如果将textholder更改为var textHolder = $('div').find('p').contents("mark").eq(0); $('div').find('p').html().indexOf(textHolder.html()) 则再次返回34。如何获得每个标记子字符串的 indexOf

2 个答案:

答案 0 :(得分:0)

我相信这基本上就是你要找的东西:

var paragraph = $("#paragraph").html();
var startIndex = paragraph.indexOf("<mark>");
var endIndex = paragraph.indexOf("</mark>");

如果你想动态地这样做,只需将它放在一个循环中,每次都是来自endIndex的子串。像这样:

var paragraph = $("#paragraph").html();
var lastIndexFound = false;
while(!lastIndexFound)
{
    var startPostition = paragraph.indexOf("<mark>");
    var endPosition = paragraph.indexOf("</mark>");
    if (endPosition == -1)
    {
        lastIndexFound = true;
        break;
    }
    $.textSelect('setRange', {
                    start: startPosition,
                    startElement: $("p"),
                    end : endPosition,
                    endElement : $("p")
                });
    paragraph = paragraph.substring(endPosition, paragraph.length);

}

答案 1 :(得分:0)

我建议您在段落中添加一个ID以及标记为&#39;标签,然后将文本作为变量获取,如下所示:

var n1 = paragraph.indexOf('<marked id="m1">');
var n2 = paragraph.indexOf('<marked id="m2">');

然后您可以使用以下方法获取子字符串的起始位置:

m1_string_name.length

如果您需要获取结束索引,可以保存标记为&#39;的其他字符串。标记与之前描述的类似,并将m2_string_name.length属性添加到您的n1值,将ifconfig | grep bro | awk '/inet/ {print $2}'属性添加到您的n2值。

干杯!