1

我尝试在这段代码中换行

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

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

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

我得到了这样的正确 div,但我不知道如何包装我的文本

4

2 回答 2

1

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

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

JS 小提琴演示

如果您只想包装特定文本:

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

JS 小提琴演示

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

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

JS 小提琴演示

于 2012-08-27T07:27:42.157 回答
1

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

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

现在将新的 Html 放回父 div

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

示例小提琴

于 2012-08-27T07:34:50.490 回答