我将以下元素分配给变量,以及该变量的一组选择索引。
var html_element = $("<p>Some text goes <b>here</b> then continues here</p>").appendTo("body");
var start = 15;
var end = 17;
这个应该代表字母&#34;她&#34;在单词&#34; here&#34;。有没有办法让我使用这些索引和html_element来获取选择的第一个HTML元素(父元素)?所以在这种情况下我想抓住&#34; 这里&#34;作为jQuery对象。
如果我想要,我可以更改文字&#34; here&#34;任何诸如&#34; new here&#34;。
简单来说,我想抓住start_index之前的第一个元素。
答案 0 :(得分:1)
尝试使用:contains()
在索引html_element
到15
的{{1}}内选择包含字符的元素; 17
,.text()
String.prototype.slice()
&#13;
var html_element = $("<p>Some text goes <b>here</b> then continues here</p>")
.appendTo("body");
var start = 15;
var end = 17;
// element containing charaters at parent element text indexes 15 through 17
var selected = $(":contains(" + html_element.text().slice(15, 17) + ")"
, html_element); // set `context` to `html_element`
// set new text at `selected`
selected.text(function(_, text) {
return "new " + text
});
&#13;
或者,<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
,.contents()
循环来计算带有for
元素的文本节点的字符
p
&#13;
var html_element = $("<p>Some text goes <b>here</b> then continues here</p>")
.appendTo("body");
var start = 15;
var end = 17;
var text = 0;
var elem = null;
var contents = html_element.contents();
for (var index = 0; index < contents.length; index++) {
var el = contents[index];
if (elem === null && (el.nodeType === 3 || el.firstChild.nodeType === 3)) {
var txt = el.textContent || el.nodeValue;
for (var i = 0; i < txt.length; i++) {
text += 1;
if (text >= start + 1 && text <= end) {
elem = $(el)
break
}
};
} else {
break;
}
};
console.log(elem, text, text >= start && text <= end);
elem.text(function(_, txt) {
return "new " + txt
})
&#13;
答案 1 :(得分:0)
如果您只想替换<b><\b>
标记的内容,可以执行以下操作:
html_element.find('b').text('My custom Text');