像这样:
<p>Lorem ipsum <mark>dolor</mark> sit amet. <mark>Lorem</mark> ipsum again
and <mark>dolor</mark></p>
我可以使用
$("mark")
选择<mark>
元素。我希望获得一个字符串列表,这些字符串代表被标记的单词以及左侧和右侧各5个字符,并在字符串前缀和后缀处添加[...]
。对于此示例,它应该是:
[
"[...] psum dolor sit [...]",
"[...] met. Lorem ipsu [...]",
"[...] and dolor [...]",
]
目前我的情况是这样的:
var $highlightMarks = $("mark");
var results = [];
for (var i = 0; i < $highlightMarks.length; ++i) {
var $c = $highlightMarks.eq(i);
var text = $c.parent().text().trim().replace(/\n/g, " ");
var indexStart = new RegExp($c.html(), "gim").exec(text).index;
text = "[...] " + text.substring(indexStart - 5, $c.html().length + indexStart + 5) + " [...]";
results.push(text);
}
alert(JSON.stringify(results))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Lorem ipsum <mark>dolor</mark> sit amet. <mark>Lorem</mark> ipsum again and <mark>dolor</mark>.</p>
但是当同一段落中存在两个相同的单词时(在本例中为 dolor
),这种方法将失败。
不应该在数组末尾显示 psum dolor sit
,而应该是 and dolor。
因此,如果有一个对 <mark>
元素的引用,正确的方法是什么,使得一些文本在右侧,另一些文本在左侧呢?