使用jQuery,如何通过选择的文本获取第一个父元素?

时间:2016-03-12 03:43:09

标签: javascript jquery

我将以下元素分配给变量,以及该变量的一组选择索引。

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之前的第一个元素。

2 个答案:

答案 0 :(得分:1)

尝试使用:contains()在索引html_element15的{​​{1}}内选择包含字符的元素; 17.text()

&#13;
&#13;
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;
&#13;
&#13;

或者,<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> </script>.contents()循环来计算带有for元素的文本节点的字符

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

如果您只想替换<b><\b>标记的内容,可以执行以下操作:

html_element.find('b').text('My custom Text');