jQuery替换第一个文本实例

时间:2010-06-28 01:11:47

标签: jquery

如果我有这样的文字;

<p>&nbsp;</p>
<p>this is the real text</p>
<p>&nbsp;</p>
<p>more</p>

我需要的是一段jQuery,它将仅用{'1}替换<p>&nbsp;</p>的第一个实例。

所以调用后的结果应该是;

<p>this is the real text</p>
<p>&nbsp;</p>
<p>more</p>

但如果第一行不是<p>&nbsp;</p>,则调用应该什么都不做。

修改

我已尝试从@Joey C实施解决方案但我无法让它工作。删除只是没有。

var myHtml = "<p>abc</p><p>next para</p>";
var newElement = $(myHtml);

if ($(newElement).first("p").text() == "abc") {
    $(newElement).first("p").remove();
}

alert($(myHtml).text());

2 个答案:

答案 0 :(得分:8)

以下查找p元素的第一个实例,如果它的html等于您指定的“&nbsp;”,则将其从DOM中删除。

   if ($("p:first").html() == "&nbsp;")  
     $("p:first").remove();

如果html作为字符串存储在变量myHTML中,则可以创建DOM元素并执行类似的比较。在测试中,我发现如果使用div包装正在创建的元素,它会更好:

  var myHtml = "<p>abc</p><p>next para</p>";
  var newElement = $("<div>" + myHtml + "</div>");

  if (newElement).find("p:first").text() == "abc") {
     newElement.find("p:first").remove();
  }

  alert(newElement.html());

这实际上不会更新包含原始html代码的字符串,因此如果您仍然需要该变量,则必须重新分配它。

  myHTML = newElement.html();

答案 1 :(得分:1)

喜欢 jQuery(以及一般的函数式编程),但有时候本机JavaScript是要走的路:

function ProcessParagraphs(elem)
{
    var children = elem.getElementsByTagName('p'); 

    if(children.length < 1)
        return;

    var p = children[0];

    if($(p).text().replace(/^\s+|\s+$/g,"").length != 0) //remove *all* whitespace and see if anything is left.
     return;
    else
      elem.removeChild(p); 

}

如果你有要处理的元素列表,那么我会给他们一个类,比如'foo',并用jQuery处理它们

$('.foo').each(ProcessParagraphs);