Remove a character from the middle of a string: without removing inner element
这件事使我很为难。我想从
1 2 3 | <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> |
我从这个开始
1 2 3 4 5 | $(".option").each(function(index, value) { $(this).text( $(this).text().replace("+","")); }) |
号
这会删除"+",但也会删除输入元素。所以我试着:
1 2 3 4 5 6 7 8 | $(".option").each(function(index, value) { var oldString = $(this).html(); var newString = oldString.replace("+",""); console.log(oldString, newString); $(this).text(newString); }) |
这就构成了一个正确的HTML标记字符串,但它是一个字符串,并以这种方式传递回DOM。我看到另一篇文章也有同样的问题,但没有解决方案。
您可以通过使用
1 2 3 4 5 6 | $(".option").each(function(index, value) { var oldString = $(this).html(); var newString = oldString.replace("+",""); console.log(oldString, newString); $(this).html(newString); }); |
这里是jquery
这是小提琴:https://jsfiddle.net/darkseal/1c572luww/
我还稍微修改了您的
你要找的是一个textnode。我给了你的标签一个ID,让它更简单,但是其他选择器的原则是一样的:
1 2 | var node = document.getElementById("example").childNodes[2]; node.nodeValue = node.nodeValue.replace("+",""); |
号
用一个简单的演示。您应该尽可能多地使用纯JS来支持jquery。普通JS通常比jQuery快得多。
在注释之后,如果您不知道textNode的确切位置,请检查这个。
回答迟了,只是为了展示使用
在这里,您将保持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $(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); }); }); |
演示