2015-02-11 76 views
0

如何在不更改周圍標籤的情況下替換文本。 (「content」)。text(「some new text」)將刪除周圍的標籤。在不改變佈局的情況下替換文本的解決方案(jQuery)

<div id="content" style="height: 100%; width: 100%; padding: px;"> 
<p><strong>I need to be replaced</strong> 
</p></div> 

<div id="content" style="height: 100%; width: 100%; padding: 5px;"> 
<p><em><strong>I need to be replaced</strong></em></p> 
</div> 

回答

2

如果您知道您總是替換強標記中的文字,那麼您可以這樣做。否則,您可能需要創建某種業務規則來確定您將要替換的內容塊中的元素。

$("#content strong").text("some new text") 

如果你一無所知封閉的標籤,除了可能存在的結構,你可以寫這樣的:

$.each($('.content'), function(i, val) { 
    console.log($(val)); 
    replaceText(val, 'This is the updated text'); 
}); 

function replaceText(element, text) { 
    if ($(element).children().size() == 0) { 
     $(element).text(text); 
     return; 
    } 
    replaceText($(element).children()[0], text); 
} 

這會查找當前對象的孩子,如果有兒童,在第一個孩子身上向下移動DOM樹。現在,如果一個元素有多個子元素,並且您不知道要替換哪個子元素,那麼您將不得不做更多工作來創建業務規則。

你也可以在CSS中使用內容選擇,如果你知道一些或所有文字,你試圖取代:

$('.content').find(':contains("I also need to be replaced")').text('Update text'); 

Link to jsFiddle

+0

感謝您的回答,問題是周圍標籤的佈局未知,所以我不知道它是一個強大的,我,p div或其他標籤。只是文字應該被替換。我希望在javascript或jquery中使用簡單的解決方案 – Richi 2015-02-11 00:59:03

+0

如果您知道哪些元素可以發生,可以使用Brian的建議來完成。如果沒有,你幾乎卡住了。 – MortenMoulder 2015-02-11 01:02:30

0

感謝您的解決方案,非常有幫助!

回覆:你也可以在CSS中使用內容選擇,如果你知道一些或所有你試圖取代文本:

是whas關鍵:)。 $(「#content」)。text()==我們想要替換的內容,

您的解決方案很好。 我finaly做到這一點:

var content = $("#content").text(); 
$("#content").html($("#content").html().replace(content,"new text")); 

謝謝!

相關問題