jQuery: come indirizzare un elemento secondario con una classe speciale
-
27-10-2019 - |
Domanda
Voglio iterare il linea elementi. A testa linea elemento ha elemento elementi come elementi infantili. Quindi per prima cosa itero sopra linea E poi voglio affrontare un certo elemento Elemento, ad esempio il terzo. Questo è il codice che ho:
$(".pricetable .righttable .line:not(.blank)").each(function(j) {
var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
currentLine.(".item").each(function(k) {
$(".pricetable .righttable .line .item").eq(i).addClass("active");
});
});
Il problema è che non so come affrontare l'elemento figlio con il elemento classe.
currentLine.(".item").each(function(k)
Questo non funziona.
Il filtro XML è applicato al valore non xml ({0:#2 = ({}), lunghezza: 1, prevObject: {lunghezza: 3, prevObject: {0:#1 = ({}), contesto:#1# Lunghezza: 1}, Contesto:#1#, selettore: ". Prietable .RightTable .LINE: NOT (.BLANK)", 0:#2#, 1: ({}), 2: ({})}, Contesto:#1#, selettore: ". Picetable .RightTable .LINE: NOT (.BLANK) .Slice (0,1)"}) File: /// C: /USERS/XXX/LIB/PRICETABLE.JS riga 112
Modificare:
Wow, non pensavo di avere una risposta così buona e veloce! Penso di andare con questa soluzione:
$(".pricetable .righttable .line:not(.blank)").each(function(j) {
$(this).children(".item").eq(i).addClass("active");
});
Soluzione
$(".pricetable .righttable .line:not(.blank)").each(function(j) {
var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
currentLine.find(".item").each(function(k) {
$(".pricetable .righttable .line .item").eq(i).addClass("active");
});
});
Se sono figli diretti di CurrentLine, dovresti essere solo in grado di farlo children('.item')
al posto di find('.item')
. Questo si chiama attraversamento del DOM. Visita questa pagina (http://api.jquery.com/category/traversing/) e leggi le descrizioni di alcune delle funzioni lì. Saranno molto utili da tenere a mente se attraversi molto :)
Altri suggerimenti
$('.pricetable .righttable .line:not(.blank)').find('.item').each(function() {
// this point to child element - item
// use $(this).addClass('active');
});
Leggero miglioramento prima di rispondere alla tua domanda:
var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
è facilmente sostituibile con:
var currentLine = $(this);
Secondo, se desideri trovare il 3 ° .item
elemento all'interno di $(this)
, uso .find()
.find(".item:nth-child(3)");
Non c'è bisogno di iterare sulle linee. Se devi iterare sulle righe, allora confronta k
a 2
(Come JavaScript conta da 0) e basta.
Se vuoi fare qualcosa con l'ennesimo item
di ogni line
, è molto più facile di quanto sembri:
var index = 3; // the third "item" element
$(".pricetable .righttable .line:not(.blank) .item:nth-child(" + index + ")")
.addClass("active");
C'è qualcos'altro per cui vuoi fare quanto sopra non è sufficiente?
$(".pricetable .righttable .line:not(.blank)").each(function() {
$(this).find('.item:nth-child(2)').addClass('active');
});