2010-06-28 103 views
4

如果我有這樣的文本;jQuery替換第一個文本實例

<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>&nbsp;</p>那麼呼叫應該什麼也不做。

編輯

我試着從實施C. @Joey解決方案,但我不能得到它的工作。刪除只是不。

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

回答

8

下找到p元素的第一個實例,並從DOM中刪除它,如果它的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(); 
+0

如果html在名爲say myHTML的變量內,該怎麼辦? – griegs 2010-06-28 02:19:12

+0

要檢查p元素內的html嗎? 只是與變量進行比較: if($(「p:first」)。html()== myHTML) – 2010-06-28 02:29:01

+0

沒有抱歉,如果在搜索中搜索的內容不在搜索中,該怎麼辦? – griegs 2010-06-28 02:30:19

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

'getElementsByTagName()'沒有領先的大寫字母。 – alex 2010-06-28 04:25:43

+0

另外,你聲明'children'是一個變量,然後在比較它時重新聲明。 – alex 2010-06-28 04:26:19

+0

@alex哎呀,謝謝。 – 2010-06-28 04:29:21