2014-06-25 16 views
6

tôi đang cố gắng để có được một mảng ra khỏi mã html này để thêm hộp, có những con số trong id của họ, nội dung của tôi:mảng jquery trả về một số không xác định?

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

Các hộp để thêm:

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

Như có cũng là các dòng html như thế này:

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

Tôi cũng cần một cái gì đó phát hiện nếu có nhiều giá trị hoặc chỉ một giá trị. Trong trường hợp này, tôi chỉ sử dụng if (theid.length > 2) vì các giá trị đơn lẻ sẽ không còn lâu hơn hai ký tự.

Mảng phải là [38,39,49] và nó là, như console.log(theid); trả về chính xác mảng này.

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); 
}; 

Nhưng nếu tôi sau đó thêm newHTML nội dung hiện tại của tôi content.html(newHTML); có luôn luôn là một "không xác định" ở phía trước của hộp nạp? Dưới đây là một ảnh chụp màn hình:

enter image description here

+2

Bạn khai báo 'newHTML' trước khi sử dụng nó trong vòng lặp' each' ở đâu? – melancia

+4

Bạn đang ghép một chuỗi mới vào một chuỗi chưa được xác định trước đó. 'newHTML + =" "' có nghĩa là 'undefined + =" "' trong mã hiện tại của bạn. – melancia

+0

đã chỉnh sửa tờ khai HTML mới, xin lỗi tôi đã bỏ lỡ nó. Được rồi Melancia đó là một điểm interresting ... vì vậy tôi nên cố gắng xác định newHTML wirth chỉ '=' thay vì '+ =' lần đầu tiên? – samtun

Trả lời

3

Đây là một sản phẩm phụ của cẩu biến. Vì bạn đang sử dụng toán tử +=, chuỗi được thêm vào cuối biến số newHTML trước đây chưa được xác định. Bạn có thể xem nó như sau:

//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 để giải thích lý thuyết đằng sau thuật ngữ kỹ thuật. – melancia

+0

Đúng vậy. Cảm ơn! – samtun

Các vấn đề liên quan