我正在尝试创建一个JavaScript,用于替换多个表中每行的颜色。问题是有些表根本不会改变。所以,我正在尝试使用此代码来获取表的行:
function alternateRows(myTable)
var rows = document.getElementsByTagName("table").getElementsByClassName(myTable).getElementsByTagName("tr");
而且,在HTML中:
<body onload="alternateRows('myTable')";>
<table class="myTable">
如果我使用id属性并将JavaScript更改为:
,我可以正常工作var rows = document.getElementById(myTable).getElementsByTagName("tr");
任何建议都会很棒。谢谢!
答案 0 :(得分:2)
getElementsByTagName
返回NodeList,这就是为什么它调用getElements而不是getElement。 NodeList没有定义“getElementsByClassName”方法,这是你应该看到的错误。
你需要使用循环。也知道你可以使用CSS选择器,所有现代浏览器都支持IE 8及更低版本。
现代浏览器的CSS(或IE8-例如帮助程序库,如ie9.js)
table.mytable tr:nth-child(odd) {
background-color: black;
}
table.mytable tr:nth-child(even) {
background-color: white;
}
答案 1 :(得分:2)
有两种DOM方法:
返回对单个节点的引用的方法。例如getElementById
和querySelector
。
返回列表节点的方法。例如,getElementsByTagName
,getElementsByClassName
,querySelectorAll
。
返回节点列表的那些方法通常会返回一个NodeList
[MDN]对象,该对象的接口非常有限。您可以使用它来访问列表中的单个元素,就像数组一样,不与DOM节点(或元素)具有相同的接口。
如果要在列表中的元素上调用更多DOM方法或DOM属性,可以直接使用其索引访问特定节点,或者在列表上迭代,并为每个元素执行此操作元素:
var elements = document.getElementsByTagName('div');
for(var i = 0, l = elements.length; i < l; i++) {
// do something with elements[i]
}
请注意,NodeList
通常是实时,这意味着对DOM的任何更改(例如删除div
元素)都会自动更新列表。
在您的特定情况下,您必须选择:
使用querySelectorAll
选择所有行:
var rows = document.querySelectorAll('table.' + myTable + ' tr');
或迭代所选元素:
var rows = [];
var tables = document.getElementsByTagName("table");
for (var i = 0, l = tables.length; i < l; i++) {
// check whether it is a table with class in the variable `myTable`
if ((' ' + tables[i].className + ' ').indexOf(' ' + myTable + ' ') > -1) {
rows = rows.concat(tables[i].getElementsByTagName('tr'));
}
}
您可以直接使用getElementsByClassName
代替按标记名称选择元素然后测试其类,但不像querySelectorAll
那样广泛支持。
答案 2 :(得分:0)
试试这个:
您只能getElementsByTagName
或getElementsByClassName
使用
像:
var rows = document.getElementsByTagName("table")[0].getElementsByTagName("tr");
或
var rows = document.getElementsByClassName('myTable')[0].getElementsByTagName("tr");
或使用querySelectorAll
<强>语法:强>
var matches = document.querySelectorAll("div.note, div.alert");
在示例中
var rows = document.querySelectorAll("table."+myTable).getElementsByTagName("tr");
getElementsByTagName
提供数组,因此您应该将其与zero index
一起使用
getElementsByClassName
阅读https://developer.mozilla.org/en-US/docs/DOM/element.getElementsByTagName 和 https://developer.mozilla.org/en-US/docs/DOM/document.getElementsByClassName
答案 3 :(得分:0)
如果必须以相同方式修改所有表,则可以使用以下代码:
var tables = document.getElementByTagName("table");
for (var i in tables)
{
var rows = tables[i].getElementByTagName("tr");
//Alternating code here
}