代码之家  ›  专栏  ›  技术社区  ›  griegs

jQuery替换文本第一实例

  •  4
  • griegs  · 技术社区  · 14 年前

    如果我有这样的文字;

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

    我需要的是一个jQuery只替换第一个实例。 <p>&nbsp;</p> 用''.

    所以通话后的结果应该是;

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

    但是如果第一行不是 <P&G&&Nbsp & lt;/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 回复  |  直到 14 年前
        1
  •  8
  •   Joey C.    14 年前

    下面查找p元素的第一个实例,如果其html等于“ &nbsp; “就像你指定的一样。

       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();
    
        2
  •  1
  •   Rodrick Chapman    14 年前

    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);