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

时间:2015-04-15 19:29:49

标签: javascript jquery html string

这个让我难过。我想删除" +"来自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) {

$(this).text( $(this).text().replace("+", ""));

})

这将删除&#34; +&#34;但也剥去了输入元素。所以我试过了:

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

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

})

这会生成一个正确的html标记字符串,但它是一个字符串,并以这种方式传回DOM。我已经看到另一篇文章有​​同样的问题,但没有解决方案。

3 个答案:

答案 0 :(得分: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()方法ref:https://api.jquery.com/html/

这里是小提琴:https://jsfiddle.net/Darkseal/1c572Luw/

我还稍微修改了您的<input>结束标记,使其符合XHTML标准。

答案 1 :(得分:4)

您正在寻找的内容称为textNode。我给你的标签提供了一个ID,以便更容易,但其他选择者的原则保持不变:

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

With a simple demo.
您应该尝试在jQuery中尽可能多地使用普通JS。普通的JS通常比jQuery快得多。

评论后,if you don't know the exact position of the textnode, check this

答案 2 :(得分:0)

迟到的答案,只是为了使用jQuery显示不同的方法。

在这里,您将保持input州,并且不会有替换您不想要的字符的风险。我们假设您在其他地方使用了+,而不仅仅是label文字。

$(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);        
    });
});

Demo