0

我正在尝试替换 jQuery 中字符串中的“>”,但我遇到的问题是我需要保留 HTML。这是我正在谈论的一个例子:

<div class="link">
    <a href="#">
        <span>Test ></span>
    </a>
    <a href="#">
        <span>Test 2 ></span>
    </a>
    <a href="#">
        <span>Test 3 ></span>
    </a>
</div>

如果我使用此代码:

$(".link").each(function() {
    var text = $(this).text();
    text = text.replace(/>/g,'/');
    $(this).text(text);
});

它将<span>标签从 HTML 中剥离出来,因为它用文本替换它。

如果我使用此代码:

$(".link").each(function() {
    var html = $(this).html();
    html = html.replace(/>/g,'/');
    $(this).html(html);
});

它替换了 span 和 anchor 标签的结束标签,因为它们在技术上>也是如此。我正在尝试找到一种方法来替换>作为文本的 's 而不是它的所有实例。

4

4 回答 4

3

试试这种方式: -

演示

$(".link a span").each(function () {
    var text = $(this).text(function (_, oldVal) {
        return oldVal.replace(/>/g, '/')
    });
});

这将适用于 html>以及&gt;

<div class="link"> <a href="#">
        <span>Test &gt;</span>
    </a>
 <a href="#">
        <span>Test 2 &gt;</span>
    </a>
 <a href="#">
        <span>Test 3 &gt;</span>
    </a>

</div>
于 2013-05-25T01:51:29.937 回答
0

您可以只搜索具有>而不是整个 html 的实际文本。

$(".link span").contents().each(function() {
    var text = this.nodeValue;
    text = text.replace(/>/g,'/');
    this.nodeValue = text;
});

http://jsfiddle.net/L5m24/

于 2013-05-25T01:51:44.267 回答
0

只需将此 HTML 分配给innerHTML一个临时元素,然后读取innerHTML此临时元素,您将获得有效的 HTML 代码,其中无效的尖括号转换为 HTML 实体。然后,您可以替换&gt;实体而不是>字符。

现场演示

于 2013-05-25T01:52:54.307 回答
0

这个简单的函数将递归地删除所有>&gt;从它在路上找到的任何文本元素:

function removeAllGt(element) {
    $(element).contents().each(function () {
        if (this.nodeType == 3) {
            this.nodeValue = this.nodeValue.replace(/>/g, '/');
        } else {
            removeAllGt(this);
        }
    });
}

用法:

$(".link").each(function () {
    removeAllGt(this);
});

演示小提琴在这里

于 2013-05-25T01:59:08.423 回答