用javascript替换类值

时间:2011-06-11 09:22:37

标签: javascript

我想将abcName替换为xyzName

<tr>
    <td>
        <b class="abcName">Bob</b>
    </td>
</tr>

使用此功能,但在页面加载时没有任何变化:

var bobo = document.getElementsByTagName("td");


function user(a, b, c) {
    try {
        if (bobo[c].innerHTML.match('>' + a)) {
            bobo[c].className = b;
        }
    } catch (e) {}
}


function customs() {
    for (i = 0; i < bobo.length; i++) {

        classChange("Bob", "xyzName", i);

    }
}
setInterval("customs()", 1000);

4 个答案:

答案 0 :(得分:1)

抓住你想要改变的元素(可以通过多种方式做到这一点,在本例中我用了ID)。

var x = document.getElementById( 'id-of-my-element' );
x.className = 'b';

删除课程使用:

x.className = x.className.replace(/\bCLASSNAME\b/,'');

希望这有帮助。

答案 1 :(得分:1)

虽然我不确定你在间隔期间做了什么以及什么是最佳方法,但你可以:

var tidi = document.getElementsByTagName("td");

function changeStyleUser(a, b, c) {
    try {
        if (tidi[c].children[0].innerHTML.indexOf(a) === 0) {
            tidi[c].className = b;
        }
    } catch (e) {}
}


function customizefields() {
    for (i = 0; i < tidi.length; i++) {

        changeStyleUser("Bob", "xyzName", i);

    }
}
setInterval("customizefields()", 1000);

http://jsfiddle.net/zBmjb/

注意,您的for循环中也有错误的函数名称。

如果使用jQuery,这将更加简单。

修改

使用jQuery:

function customizefields(a) {
    $('td b').each(function(){
        if ($(this).text().indexOf(a) === 0) {
            this.className = 'xyzName';
        }
    });
}
setInterval(function(){customizefields('Bob')}, 1000);

http://jsfiddle.net/zBmjb/1/

另外,请注意使用匿名函数而不是setInterval()中的字符串。这样,您就可以不使用eval()which is considered expensive and potentially harmful

编辑2

如果要传入名称和类关联列表,可以使用包含对象的数组,如下所示:

function customizefields(arrNames) {
    $('td b').each(function(){
        for (var i = 0; i < arrNames.length; i++) {
            if ($(this).text().indexOf(arrNames[i].name) === 0) {
                this.className = arrNames[i].class;
            }
        }
    });
}
var namesToChange = [
    {'name':'Bob','class':'Bob'},
    {'name':'Bert','class':'Bert'},
    {'name':'Jeff','class':'Jeff'}
];
setInterval(function(){customizefields(namesToChange)}, 1000);

http://jsfiddle.net/zBmjb/4/

虽然它感觉很麻烦,因为它搜索所有选定的节点,然后对于每个找到的节点,在当前节点上循环寻找匹配值的每个名称,同时每秒执行一次。更干净的方法是查看是否找到了当前节点的名称值:

function customizefields(objNames) {
    $('td b').each(function(){
        name = $(this).text();
        if (name.indexOf(" ") != -1) {
            name = name.substring(0, name.indexOf(" "));
        }
        if (objNames[name]) {
            this.className = objNames[name];
        }
    });
}
var namesToChange = {
    'Bob':'Bob',
    'Bert':'Bert',
    'Jeff':'Jeff'
};
setInterval(function(){customizefields(namesToChange)}, 1000);

http://jsfiddle.net/zBmjb/5/

编辑3

如果您需要多个值,您也可以将对象的值设为对象。

function customizefields(objNames) {
    $('td b').each(function(){
        name = $(this).text();
        if (name.indexOf(" ") != -1) {
            name = name.substring(0, name.indexOf(" "));
        }
        if (objNames[name]) {
            this.className = objNames[name].class;
            this.style.backgroundImage = "url(" + objNames[name].img + ")";
        }
    });
}
var namesToChange = {
    'Bob':{'class':'Bob','img':'bobspic.jpg'},
    'Bob':{'class':'Bert','img':'Bertphoto.jpg'},
    'Bob':{'class':'Jeff','img':'jeff.jpg'}
};
setInterval(function(){customizefields(namesToChange)}, 1000);

答案 2 :(得分:0)

if (tidi[c].innerHTML.search("class=\"abcName\"")>=0) {
     tidi[c].children[0].className = b;
}

答案 3 :(得分:0)

更改此行:

classChange("Bob", "xyzName", i);

到此:

changeStyleUser("Bob", "xyzName", i);

您的脚本将正常工作。帮自己一个忙,并使用调试器。 : - )