无论嵌套元素的数量如何,使用 javascript (jquery) 查找最里面的文本并替换它

发布于 2024-10-04 05:15:30 字数 483 浏览 7 评论 0原文

如果我有这个:

<a href="#" id="the-link"><em>any random text</em></a>

或者这个:

<a href="#" id="the-link">any random text</a>

或者这个:

<a href="#" id="the-link"><em><div id="foo"><span>any random text</span></div></em></a>

我想捕获文本“任何随机文本”,然后替换它。

我怎样才能用 jQuery 做到这一点?如果不使用 jQuery,只使用普通的 javascript?

If I have this:

<a href="#" id="the-link"><em>any random text</em></a>

Or this:

<a href="#" id="the-link">any random text</a>

Or this:

<a href="#" id="the-link"><em><div id="foo"><span>any random text</span></div></em></a>

I would like to capture the text "any random text" and then replace it.

How can I do this with jQuery? If not with jQuery, just regular javascript?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

凶凌 2024-10-11 05:15:30

您可以递归地执行此操作。这很简单:

function replaceTextNodes(node, newText) {
    if (node.nodeType == 3) {
        // Filter out text nodes that contain only whitespace
        if (!/^\s*$/.test(node.data)) {
            node.data = newText;
        }
    } else if (node.hasChildNodes()) {
        for (var i = 0, len = node.childNodes.length; i < len; ++i) {
            replaceTextNodes(node.childNodes[i], newText);
        }
    }
}

replaceTextNodes(document.getElementById("the-link"), "NEW TEXT");

You could do this recursively. It's pretty simple:

function replaceTextNodes(node, newText) {
    if (node.nodeType == 3) {
        // Filter out text nodes that contain only whitespace
        if (!/^\s*$/.test(node.data)) {
            node.data = newText;
        }
    } else if (node.hasChildNodes()) {
        for (var i = 0, len = node.childNodes.length; i < len; ++i) {
            replaceTextNodes(node.childNodes[i], newText);
        }
    }
}

replaceTextNodes(document.getElementById("the-link"), "NEW TEXT");
再见回来 2024-10-11 05:15:30
$('a:contains(starcraft)').html('starcraft 2');

编辑评论: jsfiddle

$('a').find(':only-child:last').html('starcraft 2');
$('a:contains(starcraft)').html('starcraft 2');

Edit for comment: jsfiddle

$('a').find(':only-child:last').html('starcraft 2');
谷夏 2024-10-11 05:15:30

您可能想查看这个问题: select deepest child in jQuery

看起来您需要找到最深的子节点,然后对其调用 .html('new string').text('new string')

You might want to check out this question: select deepest child in jQuery

Looks like you need to find the deepest child and then call .html('new string') or .text('new string') on it.

攒眉千度 2024-10-11 05:15:30
var link = $('#the-link');
var inner = link;
while(inner.children().length > 0)
     inner = inner.children();

inner.html('whatever');
var link = $('#the-link');
var inner = link;
while(inner.children().length > 0)
     inner = inner.children();

inner.html('whatever');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文