0

如何用 javascript/jquery 替换 span 元素中的文本或数字?这是我尝试过的,但控制台说“无法调用未定义的方法'替换'”不明白是什么问题,有人能指出我正确的方向吗?

    function changeNumber()
{
    var element = document.getElementsByClassName("grade").innerHTML; 
    var x = element.replace('1','*');
    document.getElementsByClassName("grade").innerHTML=x;
}

如果我在javascript中动态创建的span元素很重要......

4

3 回答 3

2

document.getElementsByClassName("grade")返回一个NodeList,它不像getElementbyId,你需要循环它。

如果你只有一个

function changeNumber()
{
    var element= document.getElementsByClassName("grade")[0];
    var text = element.innerHTML; 
    var x = text.replace('1','*');
    element.innerHTML=x;
} 

如果你有一套

function changeNumber()
{
    var elements= document.getElementsByClassName("grade");
    for (var i=0; i<elements.length; i++) {
        var element = elements[i];
        var text = element.innerHTML; 
        var x = text.replace('1','*');
        element.innerHTML=x;
    }
} 
于 2013-03-07T22:52:57.057 回答
0

如果您的页面中已经包含 jQuery,并且对它的使用感到满意,请尝试以下代码:

function changeNumber()
{
    $(".grade").each(function(){
        var self = this
        self.text(self.text().replace('1','*'))
    }); 
}

工作演示:http: //jsfiddle.net/pratik136/uUHv8/

于 2013-03-07T22:58:31.023 回答
0

虽然发布的答案是正确的,并且尽管您已经接受了答案,但我对创建一个replace()与 a nodeList(或者严格来说是 an Object)一起使用的函数的可能性很感兴趣,所以:

Object.prototype.replace = function (n, r) {
    var textMethod = this[0] && this[0].textContent !== undefined;
    for (var i = 0, len = this.length; i < len; i++) {
        if (textMethod) {
            this[i].textContent = this[i].textContent.replace(n, r);
        } else {
            this[i].innerText = this[i].innerText.replace(n, r);
        }
    }
    return this;
};

document.getElementsByTagName('p').replace(/1/, '*');

JS 小提琴演示

我可以确认这适用于Win XP 下的 Chrome 25、Firefox 19(也是 14 和 18,有一段时间没有更新这台计算机)。我无法在 IE 中测试,因为它和 JS Fiddle似乎有问题

这也可能不是一个好主意。但在我把它放在一起的时候,它似乎很有用(而且相对有趣)。希望它可能会有一些用处。

于 2013-03-08T01:33:45.267 回答