我试图替换另一个文本字符串,这里是我的代码加上js小提琴
<div class="label">Rating:</div>
<div class="data rating">****</div>
var str=document.getElementsByClassName("data" ,"raiting").innerHTML;
var n=str.replace(/\*/g,"star");
document.getElementsByClassName("data", "raiting").innerHTML=n;
答案 0 :(得分:5)
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');
}
或者,如果您确定只有一个元素,则可以直接指定:
var elementToAdjust = document.getElementsByClassName("data rating")[0];
// ...
答案 1 :(得分: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");
}
这两种方法都纠正了原始代码中的一些缺陷。
首先,在传递给getElementsByClassName
的参数中,评分拼写错误。其次,getElementsByClassName()
使用由空格分隔的类名来选择具有多个类的元素,而不是多个参数。获取elementsByClassName
返回必须迭代的元素数组。
JS小提琴: http://jsfiddle.net/sgGQz/5/
答案 2 :(得分:0)
你需要再次检查getElementsByClassName,它返回node-List,所以你可以这样做,你可以在每个元素之后循环然后设置你的值
var str=document.getElementsByClassName("data" ,"raiting")[0].innerHTML;
var n=str.replace(/\*/g,"star");
document.getElementsByClassName("data", "raiting")[0].innerHTML=n;
这是example因为你只有一次出现