Javascript 从字符串中间删除字符:不删除内部元素

Javascript 从字符串中间删除字符:不删除内部元素,javascript,jquery,html,string,Javascript,Jquery,Html,String,这件事把我难住了。我想从标签元素中删除“+”。以下是HTML: <label class="option" for="edit-attributes-21-33"> <input type="radio" id="edit-attributes-21-33" name="attributes[21]" value="33" checked="checked" class="form-radio"> 4 oz, +$15.00</label> 这会删除

这件事把我难住了。我想从
标签
元素中删除“+”。以下是HTML:

 <label class="option" for="edit-attributes-21-33">
 <input type="radio" id="edit-attributes-21-33" name="attributes[21]" 
 value="33" checked="checked" class="form-radio"> 4 oz, +$15.00</label>
这会删除“+”但也会删除输入元素。于是我试着:

$(".option").each(function(index, value) {

var oldString = $(this).html();
var newString = oldString.replace("+", "");
console.log(oldString, newString);
$(this).text(newString);

})

这使得字符串具有正确的html标记,但它是一个字符串,并以这种方式传递回DOM。我看到另一篇文章也有同样的问题,但没有解决办法

您可以通过使用
.html()
而不是
.text()
来实现您想要的代码:

以下是JQuery
.html()
方法参考:

这是小提琴:


我还稍微修改了您的
结束标记,使其与XHTML兼容。

您正在寻找的是一个textNode。我为您的标签提供了一个ID以使其更简单,但其他选择器的原则仍然相同:

var node = document.getElementById("example").childNodes[2];
node.nodeValue = node.nodeValue.replace("+", "");

在jQuery中,您应该尽可能多地使用纯JS。普通JS通常比jQuery快得多


在评论之后,.

延迟回答,只是为了使用
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);        
    });
});

这看起来与问题中的第二段代码完全相同。您更改了什么?.replace(“+”,“”)将只替换“+”的第一个实例;如果要删除“+”的所有实例,请添加全局标志;e、 包括对你改变了什么以及为什么改变的解释是很有帮助的。此外,在html5中,输入端没有斜杠是完全有效的。我相信只有xhtml需要斜杠。我只回答了OP的问题。无论如何,你可以使用.replace(/\+/g,”),如果你需要替换所有出现的内容。我不太确定你做了什么使输入标记“HTML5兼容”,这是一个无效元素。如果他不知道textNode的确切位置怎么办?使用
普通Javascript
,这是一个很好的解决方案。你需要单击“确切位置”链接并找出一种找到你想要的东西的方法;)操纵文本节点绝对是最干净的方法。您可能希望在它们之间进行循环以找到正确的一个或多个。我试图找到一个完整答案的好的重复问题,但没有找到,所以我将保留此问题。@Martijn谢谢,我今天遇到了一个类似的问题,字符串中的文本过多(谢谢ubercart!),我使用了您的解决方案。修改为与当前案例相关但不完全重复:我不确定您所说的输入元素是什么意思?举例说明它最初是什么,在当前代码之后变成什么,以及您希望它做什么。例如:原始:
Abc+123+456
应该是
Abc 123+456
,但此代码返回
Abc 123 456
,您实际上可以完全删除
分离。下一行将文本设置为空就足够了。
var node = document.getElementById("example").childNodes[2];
node.nodeValue = node.nodeValue.replace("+", "");
$(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);        
    });
});