在我的代碼中,我使用querySelectorAll
來創建nodeList。Javascript過濾CSS類的childNodes
var a = document.querySelectorAll('tbody > tr.editable:not(.empty-bench)')
此數組包含~17個元素,我希望能夠過濾這些結果,其中childNode具有某個類。
我目前使用a[0].childNodes
但這只是顯示所有的孩子。我只希望它返回一個包含類.P-xs
在我的代碼中,我使用querySelectorAll
來創建nodeList。Javascript過濾CSS類的childNodes
var a = document.querySelectorAll('tbody > tr.editable:not(.empty-bench)')
此數組包含~17個元素,我希望能夠過濾這些結果,其中childNode具有某個類。
我目前使用a[0].childNodes
但這只是顯示所有的孩子。我只希望它返回一個包含類.P-xs
您可以使用Function.prototype.call
借用Array.prototype.filter
並能夠用它在你的NodeList
:
var a = document.querySelectorAll('tbody > tr.editable:not(.empty-bench)');
var b = [].filter.call(a, function(el) {
return el.classList.contains('P-xs');
});
您可以在您的初始查詢選擇器結果上使用for循環來創建一個只包含具有給定後代的元素的數組。看下面的例子。
var a = document.querySelectorAll('#one');
var b = [];
for (var i = 0; i < a.length; i++) {
if (a[i].querySelectorAll('#two').length) {
b.push(a[i]);
}
}
b.forEach(function (item, i, array) {
item.style.color = 'red';
});
<div id="one">
One
</div>
<div id="one">
<div id="two">Two</div>
</div>
如果你正在尋找childNode
包含然後P-xs
類試試這個。它將返回具有該類的所有子節點的數組。
var a = document.querySelectorAll('tbody > tr.editable:not(.empty-bench)');
var afterFilter = [].concat.apply([], [].map.call(a, function (el) {
return [].filter.call(el.childNodes, function (ch) {
return ch.nodeType === 1 && ch.classList.contains('P-xs');
});
}));
但是如果你想那麼家長嘗試如下:
var a = document.querySelectorAll('tbody > tr.editable:not(.empty-bench)');
var afterFilter = [].map.call(a, function(el) {
return [].filter.call(el.childNodes, function (ch) {
return ch.nodeType === 1 && ch.classList.contains('spec');
});
});
'TBODY> tr.editable:沒有(.empty-替補)> .P-xs'? –
'querySelectorAll'返回一個'NodeList'或'null',而不是'Array'。 – Oriol
不知道我是否理解,但嘗試'querySelectorAll('tbody> tr.editable:not(.empty-bench).P-xs')' – Oriol