包装nodeValue

时间:2012-08-27 07:15:31

标签: javascript jquery

我尝试在此代码中包装文本

<div class="div">
    <span></span>
    <a></a>
    *text I want to wrap*
    <span></span>
</div>

我知道文字是什么,但我不知道他在div中的位置是什么

$(".div:contains('*text*')")

我得到了正确的div,但我无法弄清楚如何包装我的文本

2 个答案:

答案 0 :(得分:1)

假设您想要包装所有文本(当然我可能错了),我建议:

$('.div').contents().each(
    function(){
        if (this.nodeType == 3) {
            $(this).wrap($('<a />', {'href':'#'}));
        }
    });​

JS Fiddle demo

如果您只想包装特定的文字:

$('.div').contents().each(
    function(){
        if (this.nodeType == 3 && this.nodeValue.trim() == "*text I want to wrap*" ) {
            $(this).wrap($('<a />', {'href':'#'}));
        }
    });​

JS Fiddle demo

鉴于您更喜欢将HTML视为字符串的简单方法,我想我会发布一个比您接受的更简单的答案:

$('.div').html(
    function(i,h){
        return h.replace('*text I want to wrap*','<b>$&</b>');
    });​

JS Fiddle demo

答案 1 :(得分:1)

最简单的方法是获取父元素的html并用新字符串

替换字符串
newHtml = $(".div").html().replace("*text I want to wrap*","<b>new html</b>");

现在将新的Html放回到父div

 $(".div").html(newHtml);

Example fiddle