Jquery $(element).contents().first().text("new text")不起作用?

Coo*_*Coo 6 javascript jquery

我在谷歌或这里找不到任何相关信息.

我有一个div,一些文本和一些HTML如下:

<div id="test-div">
    http://<strong>somewebsite.com</strong>/big/long/unfriendly/path/
</div>
Run Code Online (Sandbox Code Playgroud)

我想要做的是<wbr>在每个斜线之后添加一个.(因为该值不会另外包裹并且弄乱了我的桌子).在$('#test-div').html()遗嘱上做一个简单的替换也会弄乱强标签,所以这不是一个选择.

我想$('#test-div').contents()用过滤掉文本部分(递归)会起作用.但是我似乎无法编辑返回的各个位.我希望这会改变http://部分:

$('#test-div').contents().first().text("something");
Run Code Online (Sandbox Code Playgroud)

但它什么都没做.我知道我的导航正确,因为这样的事情:

$('#test-div').contents().first().wrap( "<b></b>" );
Run Code Online (Sandbox Code Playgroud)

确实有效.

为什么我不能改变文本位?(对最初问题更优雅的解决方案也会很棒)

Coo*_*Coo 0

最终,由于这个这个项目,我找到了自己的答案。我现在有一个函数可以替换上下文中所有文本节点中的所有文本。它还可以将 HTML 插入到所述节点中。

JavaScript 函数:

function recursiveReplace(node, oldValue, newValue) {
    if (node.nodeType === 3) { // text node
        $(node).replaceWith(node.nodeValue.replace(oldValue, newValue));
    } else if (node.nodeType === 1) { // element
        $(node).contents().each(function() {
            recursiveReplace(this, oldValue, newValue);
        });
    }
}

//To call
div = $('#test-div');
recursiveReplace(div[0], "/", "/<wbr />");
Run Code Online (Sandbox Code Playgroud)

这以通用的方式解决了这个问题。