jQuery: cómo abordar un subtítemo con una clase especial
-
27-10-2019 - |
Pregunta
Quiero iterar sobre el línea elementos. Cada línea El elemento tiene artículo elementos como elementos infantiles. Así que primero ito línea Y luego quiero abordar un cierto artículo elemento, por ejemplo, el tercero. Este es el código que tengo:
$(".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");
});
});
El problema es que no sé cómo abordar el elemento infantil con el artículo clase.
currentLine.(".item").each(function(k)
Esto no funciona.
El filtro XML se aplica al valor no xml ({0:#2 = ({}), longitud: 1, previoBject: {longitud: 3, PrevObject: {0:#1 = ({}), context:#1# , longitud: 1}, contexto:#1#, selector: ". Pricetable .righttable .line: no (.blank)", 0:#2#, 1: ({}), 2: ({})}, contexto:#1#, selector: ". Pricetable .RightTable .line: no (.Blank) .slice (0,1)"}) archivo: /// c: /users/xxx/lib/pricetable.js línea 112
Editar:
¡Vaya, no pensé que obtenía una respuesta tan buena y rápida! Creo que voy con esta solución:
$(".pricetable .righttable .line:not(.blank)").each(function(j) {
$(this).children(".item").eq(i).addClass("active");
});
Solución
$(".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");
});
});
Si son hijos directos de la línea actual, deberías poder hacer children('.item')
en lugar de find('.item')
. Esto se llama atravesar el DOM. Visite esta página (http://api.jquery.com/category/traversing/) y lea las descripciones de algunas de las funciones allí. Serán muy útiles para tener en cuenta si atraviesas mucho :)
Otros consejos
$('.pricetable .righttable .line:not(.blank)').find('.item').each(function() {
// this point to child element - item
// use $(this).addClass('active');
});
Ligera mejora antes de responder a su pregunta:
var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
es fácilmente reemplazable con:
var currentLine = $(this);
Segundo, si desea encontrar el 3er .item
elemento dentro de $(this)
, usar .find()
.find(".item:nth-child(3)");
No hay necesidad de iterar sobre las líneas. Si debe iterar sobre las líneas, simplemente compare k
a 2
(Como JavaScript cuenta desde 0) y eso es todo.
Si quieres hacer algo con el enésimo item
de cada line
, es mucho más fácil de lo que parece:
var index = 3; // the third "item" element
$(".pricetable .righttable .line:not(.blank) .item:nth-child(" + index + ")")
.addClass("active");
¿Hay algo más que quieras hacer que lo anterior no sea suficiente?
$(".pricetable .righttable .line:not(.blank)").each(function() {
$(this).find('.item:nth-child(2)').addClass('active');
});