不能在所有元素上使用.replace()包含相同的类

时间:2016-05-06 10:19:00

标签: javascript jquery html

我使用以下方法替换所有CREATE DATABASE ebdb WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8'; 代码'逗号哈希

<p>

实际上这些var node = document.getElementByClassName('discovereedKeywords'); node.innerHTML = node.innerHTML.replace(/,/g, '#'); 代码实际上是由for循环生成的,但我的方法只更改了它找到的第一个<p>代码,因此我尝试了类似下面的内容

考虑html看起来像这样

<p>

的Javascript

 <p class="discovereedKeywords"> apple,banana,oranger</p>

 <p class="discovereedKeywords"> apple,oranger,oranger</p>

 <p class="discovereedKeywords"> kiwi,melon,pinapple</p>

3 个答案:

答案 0 :(得分:2)

&#13;
&#13;
$('p').text(function(_, txt){
   return txt.replace(/,/g, '#');
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p class="discovereedKeywords"> apple,banana,oranger</p>

 <p class="discovereedKeywords"> apple,oranger,oranger</p>

 <p class="discovereedKeywords"> kiwi,melon,pinapple</p>
&#13;
&#13;
&#13;

在jQuery中,您可以使用text()方法:

$('p').text(function(_, txt){
   return txt.replace(/,/g, '#');
});

答案 1 :(得分:1)

这应该有效,问题是document.getElementsByClassName返回DOM数组
但是您使用的document.getElementByClassName无效 只是没有document.getElementByClassName,请注意 s 符号

var nodes = document.getElementsByClassName('discovereedKeywords');
//this converts DOM array to plain JS Array
[].slice.call(nodes).forEach(function(node){
    node.innerHTML = node.innerHTML.replace(/,/g, '#');
});

答案 2 :(得分:1)

你很亲密!首先,它是getElementsByClassName,复数。其次,如果你想获得 i -th元素,请使用数组中的i,而不是变量。

这是a fiddle

for (var i = 0; i < document.querySelectorAll('.discovereedKeywords').length; i++) {
  var node = document.getElementsByClassName('discovereedKeywords')[i];
  node.innerHTML = node.innerHTML.replace(/,/g, '#');
}

if you want to use jQuery

编辑:A. Wolff是正确的指出,在jQuery中你不需要单独循环每个项目,因为它内部使用类选择器执行此操作。

$(".discovereedKeywords").each(function(i, e) {
  $(e).text(function() {
    return $(e).text().replace(/,/g, '#');
  });
});