1

我试图用另一个文本字符串替换一个文本字符串这是我的代码加上 js fiddle

HTML

<div class="label">Rating:</div>
<div class="data rating">****</div>

Javascript

var str=document.getElementsByClassName("data" ,"raiting").innerHTML; 
var n=str.replace(/\*/g,"star");
document.getElementsByClassName("data", "raiting").innerHTML=n;

演示

http://jsfiddle.net/sgGQz/1/

4

3 回答 3

6

顾名思义,document.getElementsByClassName()方法返回元素的集合 ( HTMLCollection ),而不是单个元素 - 即使 DOM 中只有一个具有给定类名的元素。

您需要遍历它们中的每一个才能进行此类替换。例如:

var elements = document.getElementsByClassName("data rating");
for (var i = 0, l = elements.length; i < l; i++) {
  elements[i].innerHTML = elements[i].innerHTML.replace(/\*/g, 'star');
}

JSF中。

或者,如果您确定应该只有一个元素,您可以直接分配它:

var elementToAdjust = document.getElementsByClassName("data rating")[0];
// ...
于 2013-09-16T09:19:00.007 回答
1

如果您只有一次出现该元素,这将起作用:

var str=document.getElementsByClassName("data rating")[0].innerHTML; 
var n=str.replace(/\*/g,"star");
document.getElementsByClassName("data rating")[0].innerHTML=n;

如果存在多个data rating元素,请使用:

    var elems =document.getElementsByClassName("data rating");
    for(var i = 0; i < elems.length; i++){
        elems[i].innerHTML = elems[i].innerHTML.replace(/\*/g,"star");
    }

这两种方法都纠正了原始代码中的一些缺陷。

首先, rating 在传递给 的参数中拼写错误getElementsByClassName。其次,getElementsByClassName()使用由空格分隔的类名来选择具有多个类的元素,而不是多个参数。GetelementsByClassName返回一个必须迭代的元素数组。

JS 小提琴:http: //jsfiddle.net/sgGQz/5/

于 2013-09-16T09:22:01.320 回答
0

您需要再次检查getElementsByClassName,它返回节点列表,因此您可以这样做,然后您可以在每个元素之后循环并设置您的值

var str=document.getElementsByClassName("data" ,"raiting")[0].innerHTML; 
var n=str.replace(/\*/g,"star");
document.getElementsByClassName("data", "raiting")[0].innerHTML=n;

这是示例,因为您只有一次出现

于 2013-09-16T09:18:50.563 回答