Tengo dos matrices, una está llena de cadenas, la otra es una matriz de objetos. Los índices en cada uno corresponden, y quiero reemplazar el texto de cada uno de los objetos en mi conjunto de objetos con el texto correspondiente en mi conjunto de cadenas.

Por ejemplo, tengo una matriz como esta:

var textarr = ["value1", "value2", "value3"]

Y una matriz de objetos Jquery que contiene un montón de elementos span:

var spans = $("span.myClass");
var spanarr = $.makeArray(spans);

Estoy tratando de usar $ .each () para iterar sobre cada uno de los tramos y usar el índice correspondiente de mi matriz de texto para asignar un valor de texto al tramo actual.

He intentado un par de maneras diferentes, y nada parece funcionar. Me falta algo de lógica aquí, pero ¿por qué no funcionaría esto ?:

        i = 0;
        jQuery.each(spanarr, function() {                    
            $(this).text(textarr[i]);
            i++;
        });

EDITAR: Creo que el resto de mi función podría estar causando que esto no funcione. Aquí está el guión completo:

        $("span input:radio").click(function() {
        if (($(this).is(":checked")) == true) {
            var parent = $(this).parent();
            var aunts = parent.parent().children();
            var parentIndex = aunts.index(parent);
            var indexToNthChild = parentIndex + 1;
            var otherSpans = $(".DropDownMenu span:nth-child(" + indexToNthChild + ")");
            var position = parent.position();
            var topValue = position.top;
            var smallPrice = otherSpans.children("span.dropDownPrice");
            var pricearr = jQuery.makeArray(smallPrice);
            var textarr = [];
            jQuery.each(pricearr, function() {
                textarr[i] = $(this).text();
            });
            alert(textarr); // Returns all the text values expected in array
            var changers = $(".bigPriceChanger");
            var changerarr = $.makeArray(changers);
            $(".DropDownMenu").css({ "top": "-" + topValue + "px" });
            $(".DropDownMenu span").css("background-image", "none");
            parent.css({ "background": "#f3f1e7 url(assets/images/branding/DropDownArrow.gif) no-repeat right" });
            otherSpans.css({ "background": "#f3f1e7 url(assets/images/branding/DropDownArrow.gif) no-repeat right" });
            alert(changearr); // Returns all span objects in array
            i = 0;
            jQuery.each(changearr, function() {                    
                $(this).text(textarr[i]);
                i++;
            });


        }
    });
4
Sarah Jean 22 dic. 2009 a las 01:04

7 respuestas

La mejor respuesta

Odio terminar la pregunta con una copia de 'todo fue un sueño después de todo', pero resulta que mi navegador no funcionaba.

Desde entonces, he revisado mi script (y las millones de variaciones que todos sugirieron) en IE8 y el firefox de otra persona, y bajo y he aquí, funciona.

1
Sarah Jean 22 dic. 2009 a las 14:38

¿Por qué llamar a $.makeArray? Puede recorrer sus tramos de esta manera ...

$("span.myClass").each(function(i) {
  alert(textarr[i]);
  $(this).text(textarr[i]);            
});
0
Josh Stodola 21 dic. 2009 a las 22:27

Creo que su código no funciona porque la variable i se definió fuera de su alcance.

Probablemente haya una mejor solución, pero podría intentar lo siguiente:

function createF() {
    var i = 0;
    function f() {
        $(this).text(textarr[i]);
        i++;
    }
    return f;
}
f = createF();
jQuery.each(spanarr, f);     
0
jbochi 21 dic. 2009 a las 22:22

Su código está bien, aunque la llamada makeArray es redundante

Debe haber un error en otro lugar,

Aquí está tu código funcionando bien en firefox http://jsbin.com/oxiwu

Para editar vaya a http://jsbin.com/oxiwu/edit

0
ekhaled 21 dic. 2009 a las 22:14

Es posible que desee probar algo como esto:

var spans = $("span.myClass");
for(i=0;i<spans.length;i++){
   spans[i].innerHTML = textarr[i];
}

Puede pensar en un objeto jQuery como una versión extendida de una matriz. Puede usar length y [i] en referencia a la cantidad de elementos DOM seleccionados y el elemento DOM en un determinado índice, respectivamente.

0
Justin Swartsel 21 dic. 2009 a las 22:12

Creo que no necesitas la llamada para hacer Array. Solo escribe:

i = 0;
jQuery.each($("span.myClass"), function() {                    
    $(this).text(textarr[i++]);
});
1
Roland Bouman 21 dic. 2009 a las 22:12

Tratar

$("span.myClass").each(function (i) {
    $(this).text(textarr[i]);
});
2
Rich 21 dic. 2009 a las 22:31