0

为了将p字符串放入div我们可以使用 jquery 的 wrap() 函数,如下所示:

 $('p').wrap("<div></div>");

有没有办法将字符串“p”的每次出现都包含在 html 标记中?

<html>
    <head>

    </head>
    <body>

        bla bla bla Hello world other words and etc and again Hello world

    </body>
</html>

在这个 html 文档中有两个“Hello world”,我怎样才能把它们放在p标签中?

所需的 html 结果必须是:

bla bla bla `<p>Hello world</p>` other words and etc and again `<p>Hello world</p>`
4

3 回答 3

2

用你的例子..你可以使用正则表达式来做到这一点

$('body').html(function(i,v){
  return v.replace(/Hello world/g,'<p>Hello world</p>');
});

小提琴

或使用拆分

$('body').html(function(i,v){
  return v.split('Hello world').join('<p>Hello world</p>');
});

小提琴

于 2013-01-11T22:29:41.290 回答
1

据我了解,您想将 Hello World 放在该段落元素中。有两种方法可以做到这一点。

任何一个

$('<p>Hello World</p>').wrap("<div></div>");

或者

$('p').wrap("<div></div>").text('Hello World');
于 2013-01-11T22:13:03.930 回答
1

因此,您可以找到所有文本节点,

function forEachTextNode(f, node) {
  if (node.nodeType === 3) {
    f(node);
  } else {
    for (var child = node.firstChild, next; child; child = next) {
      next = child.nextSibling;  // Grab next early in case f mutates the DOM.
      forEachTextNode(f, child);
    }
  }
}

然后拆分使用Text.splitText来打破你想要的单词:

function forEachSubstring(f, text, textNode) {
  var i = textNode.nodeValue.indexOf(text);
  if (i >= 0) {
    // Split before the words we want to operate on.
    textNode.splitText(i);
    var substringNode = textNode.nextSibling;
    // Split after the words we want to operate on.
    substringNode.splitText(text.length);
    var rest = substringNode.nextSibling;
    // Operate on the substring.
    f(substringNode);
    // Recurse to look for more occurrences of text.
    forEachSubstring(f, text, rest);
  }
}

然后将它们绑在一起:

function wrapInParagraph(node) {
  var wrapper = node.ownerDocument.createElement('p');
  node.parentNode.replaceChild(wrapper, node);
  wrapper.appendChild(node);
}

forEachTextNode(
    function (tn) { forEachSubstring(wrapInParagraph, "Hello, World", tn); },
    document.body);
于 2013-01-11T22:37:53.150 回答