2015-02-11 71 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")); 

谢谢!

相关问题