Middle
Kā atrast visus slēptos elementus lapā?
sobes.tech AI
Atbilde no AI
CSS selektorus var izmantot kopā ar JavaScript.
Galvenie pieejas:
- **
:not(:visible)pseido-klase (nestandarta)**: Lai gan standarta CSS nav tieša selektora "neredzams", dažas rāmi un bibliotēkas (piemēram, jQuery) piedāvā savas realizācijas vai arī var izveidot lietotāja loģiku. Šī pieeja ir vairāk koncepcijas līmenī. - display, visibility un opacity pārbaudes: Tas ir visuzticamākais veids nativajā JS. Slēptie elementi ir tie ar
display: none,visibility: hiddenvaiopacity: 0(ja tie nav vecāki elementi, kas ir redzami bērniem).
// Saņemam visus elementus lapā
const allElements = document.querySelectorAll('*');
const hiddenElements = [];
allElements.forEach(element => {
const computedStyle = getComputedStyle(element);
// display: none pārbaude
if (computedStyle.display === 'none') {
hiddenElements.push(element);
return; // elements ir slēpti, tāpēc nav jēgas turpināt pārbaudi
}
// visibility: hidden pārbaude
if (computedStyle.visibility === 'hidden') {
hiddenElements.push(element);
return;
}
// opacity: 0 pārbaude
if (computedStyle.opacity === '0' && !(element.children.length > 0 && Array.from(element.children).some(child => getComputedStyle(child).opacity !== '0')) ) {
// Sarežģīts nosacījums: pārbaudām, vai pats elements ir necaurredzams dēļ opacity: 0
// un vai tam nav redzamu bērnu (ar opacity > 0)
hiddenElements.push(element);
return;
}
// Papildu pārbaude par vecāka slēpšanu
let parent = element.parentElement;
while (parent) {
const parentComputedStyle = getComputedStyle(parent);
if (parentComputedStyle.display === 'none' || parentComputedStyle.visibility === 'hidden' || parentComputedStyle.opacity === '0') {
hiddenElements.push(element);
break; // elements ir slēpti vecāka dēļ
}
parent = parent.parentElement;
}
});
console.log('Slēptie elementi:', hiddenElements);
- jQuery: jQuery atvieglo šo uzdevumu ar pseido-klasi
:hidden.
// Meklējam slēptos elementus ar jQuery
const hiddenElementsJquery = $(':hidden');
console.log('Slēptie elementi (jQuery):', hiddenElementsJquery);
Svarīgi: Izmantojot nativu JavaScript, opacity: 0 pārbaude prasa rūpīgu analīzi, lai neiekļautu vecākus, kuriem tikai viens bērns ir ar opacity: 0, bet pats vecāks un citi bērni ir redzami. Tāpat jāņem vērā, ka elements var būt paslēpts arī izmēra (platums/augstums 0) vai atrašanās vietas ārpus viewport, bet tas jau nav tieši CSS "slēpšanas" īpašība.