2014-06-25 19 views
6

benim içeriğe, kendi kimliği numaraları sahip kutuları eklemek için bu html kodu dışına dizisini almak için çalışıyorum:jquery dizisi bir tanımlı olmayanı döndürüyor?

<a href="#" data-box="38,39,40">An Array</a> 

kutu eklemek üzere:

<div id="box38"> 
    ... 
</div> 
<div id="box39"> 
    ... 
</div> 
<div id="box40"> 
    ... 
</div> 

olarak orada böyle html hatları da şunlardır:

<a href="#" data-box="24">No Array</a> 

Ben de birden çok değerin ya da sadece bir tane varsa algılar şey lazım. Bu durumda, if (theid.length > 2) kullanıyorum çünkü tek değerler daha sonra iki karakter almayacak.

Dizi [38,39,49] olmalıdır ve console.log(theid); tam olarak bu diziyi döndürür. Sonra benim mevcut içeriğin content.html(newHTML); için newHTML eklerseniz

var theid = $(this).data('box'); 
var newHTML = ''; 

if (theid.length > 2) { 
    theid = theid.split(','); 
    $.each(theid, function(idx) { 
     newHTML += $('#box' + theid[idx]).html(); 
    }); 
} else { 
    var newHTML = ''; 
    newHTML = $('#box' + theid).html(); 
    console.log(theid); 
}; 

Ama her yüklenen kutuların önünde bir "tanımsız" var? Burada bir ekran görüntüsü var:

enter image description here

+2

Herbir döngü içinde kullanmadan önce 'newHTML'yi bildiriyorsunuz? – melancia

+4

Önceden tanımlanmamış bir tanesine yeni bir dizgi birleştiriyorsunuz. 'newHTML + =" "' mevcut kodunuzda undefined + = "" 'anlamına gelir. – melancia

+0

, yeniHTML bildirimini düzenledi, üzgünüm, özledim. Tamam Melancia bir intresting noktasıdır ... bu yüzden yeniHTML wirth'i sadece ilk kez = = 'yerine' = 'tanımlamaya çalışmalıyım? – samtun

cevap

3

Bu değişken Kaldırma bir yan ürünüdür. += işlecini kullandığınız için, dize, önceden tanımlanmamış olarak tutulan newHTML değişkeninin sonuna eklenir. Şu şekilde bakabilirsiniz:

//hoisted 
var newHTML = undefined; 

var theid = $(this).data('box'); 

if (theid.length > 2) { 
theid = theid.split(','); 
$.each(theid, function(idx) { 
    newHTML += $('#box' + theid[idx]).html(); 
}); 
} else { 
/*var */newHTML = ''; 
newHTML = $('#box' + theid).html(); 
console.log(theid); 
}; 
+1

+1 teknik terimlerdeki teoriyi açıklamak için. – melancia

+0

İşte bu. Teşekkürler! – samtun