这个让我难过。我想删除" +"来自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。我已经看到另一篇文章有同样的问题,但没有解决方案。
答案 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);
});
});