我想将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);
答案 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);
注意,您的for
循环中也有错误的函数名称。
如果使用jQuery,这将更加简单。
修改强>
使用jQuery:
function customizefields(a) {
$('td b').each(function(){
if ($(this).text().indexOf(a) === 0) {
this.className = 'xyzName';
}
});
}
setInterval(function(){customizefields('Bob')}, 1000);
另外,请注意使用匿名函数而不是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);
虽然它感觉很麻烦,因为它搜索所有选定的节点,然后对于每个找到的节点,在当前节点上循环寻找匹配值的每个名称,同时每秒执行一次。更干净的方法是查看是否找到了当前节点的名称值:
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);
编辑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);
您的脚本将正常工作。帮自己一个忙,并使用调试器。 : - )