我正在尝试使用querySelectorAll()来获取每个' td'具有对齐属性的元素&&是' tr'
的孩子这有效:
document.querySelectorAll('tr>td');
这有效:
document.querySelectorAll('[align]');
但如何将它们结合起来?
答案 0 :(得分:1)
前言:在tr>
:The only valid parent element for a td
is a tr
前面td
没有任何意义。所以我把它从下面留下了。
这取决于你想做什么。
如果您只想要具有td
属性的align
元素:
document.querySelectorAll("td[align]")
或仅td
元素属于具有tr
属性的align
元素的子元素
document.querySelectorAll("tr[align]>td")
或者只有align
属性 children td
元素的元素:
document.querySelectorAll("td[align]")
或者只有align
属性的元素是后代(不一定是直接子元素)的td
元素:
document.querySelectorAll("td [align]")
......等等; full details in the spec
重新评论以下内容:
它有效,但有没有办法不从每个tr中选择第一个td?
你的问题中没有任何相关内容。
你可以使用td:not(:nth-child(0))
,这意味着" td
不是其父母的第一个孩子" 提供您永远不会将script
元素作为tr
的第一个子元素(这是有效的,但却是一件奇怪的事情)。有了这个条件,它就可以了,因为只有td
和script
是tr
的有效子项。
或者您可以直接选择所有相关的td
然后:
var list = Array.prototype.slice.call(document.querySelector("whatever"), 1);
...它将为您提供一个数组,跳过querySelectorAll
返回的列表中的第一个条目。
你的进一步评论:
相同
tr[style]>td[align]:not(:nth-child(0))
返回了550个节点列表,与tr[style]>td[align]
右。同样,:nth-child
会查看它是什么孩子,不它位于前一个选择器所选列表的位置。
如果您想跳过每个行中的第一个td
,并且您想忽略不具有tr
属性的style
,它更复杂:
var result = Array.prototype.reduce.call(
document.querySelectorAll("tr[style]"),
function(list, row) {
list.push.call(
list,
Array.prototype.slice.call(row.querySelectorAll("tr[align]"), 1)
);
return list;
},
[]
);
答案 1 :(得分:0)
将它们组合在一起:
document.querySelectorAll('tr>td[align]');
注意:<td>
仅允许作为<tr>
的孩子。
答案 2 :(得分:0)
您可以使用与CSS相同的方式组合选择器,例如:
document.querySelectorAll('tr>td[align]');
如果您没有嵌套表格,则表示为document.querySelectorAll('td[align]');
。