从字符串中删除一个字符:不删除内部元素

9
这个问题让我感到困惑。我想要从一个

相关但不完全重复:https://dev59.com/1W855IYBdhLWcg3w3IRh - James Montagne
我不确定您所说的输入元素被剥离是什么意思?请举一个例子,说明它原来是什么,经过当前代码后变成了什么,以及您希望它执行什么操作。例如:原始内容为 Abc + 123 + 456,应该变成 Abc 123 + 456,但是这段代码返回的结果是 Abc 123 456 - Addo Solutions
3个回答

6
您可以使用.html()而不是.text()来实现您想要的代码功能:
$(".option").each(function(index, value) {
    var oldString = $(this).html();
    var newString = oldString.replace("+", "");
    console.log(oldString, newString);
    $(this).html(newString);
});

这里是JQuery的`.html()`方法参考:https://api.jquery.com/html/ 这是Fiddle链接:https://jsfiddle.net/Darkseal/1c572Luw/ 我还稍微修改了你的``结束标签以使其符合XHTML规范。

2
这看起来与问题中的第二个代码块非常相似。你改变了什么? - James Montagne
1
.replace("+", "") 只会替换第一个 "+" 实例;如果你想删除所有 "+" 实例,可以添加全局标志;例如:.replace(/+/g, ' ') - joshvito
2
在编程中,包含对所做更改的解释以及原因是非常有帮助的。此外,在HTML5中,没有斜杠结尾的输入也是完全有效的。我相信只有XHTML需要斜杠。 - James Montagne
1
我只回答了原帖的问题。无论如何,如果你需要替换所有出现的内容,可以使用.replace(/+/g, "")。 - Darkseal
2
我不太确定你是如何使输入标签“符合HTML5”的,它是一个空元素。 - Marc
显示剩余6条评论

4

1
如果他不确定textNode的确切位置怎么办? - jmartins
1
只使用“纯JavaScript”就找到了一个很棒的解决方案。 - emerson.marini
然后您需要点击“精确位置”链接,并想出一种找到您想要的东西的方法 ;) - Martijn
非常酷,我已经使用了另一种解决方案,但是我有机会会尝试这个。我确实需要循环遍历所有元素,所以我已经在使用jQuery的.each方法,因此我仍然留在jQuery领域。 - icicleking
1
@Martijn 谢谢你的帮助,我今天遇到了一个类似的问题,字符串中有过多的文本(感谢ubercart!)我使用了你的解决方案。针对当前情况进行了修改:http://jsfiddle.net/3px7480v/3/ - icicleking
显示剩余3条评论

0
晚回答,只是为了展示使用 jQuery 的不同方法而已。
在这里,您将保留输入状态,并且不会有替换不想要的字符的风险。假设您在其他地方也使用了“+”,而不仅仅是在标签文本中。
$(function () {
    $('label.option').each(function () {
        var label = $(this);
        var input = $('input.form-radio', this);
        var text = label.text();

        // Clean up the label contents.
        label.empty();        

        // Replace the char occurrences.
        text = text.replace(/\+/g, "");

        // Append both the input and the modified text.
        label.append(input).append(text);        
    });
});

演示


你实际上可以完全删除 detach。将下一行设置文本为空就足够了。 - James Montagne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接