2013-07-27 133 views
12

我一定在某個地方犯了錯誤,所以document.getElementsByClassName().innerHTML總是返回undefineddocument.getElementsByClassName()。innerHTML總是返回「undefined」

首先我產生通過JavaScript <li>

$('#list').append('<li class="box"><img class="picture" src="images/HotPromo/tagPhoto1.png"/><p class="name"><b>Name</b></p><p class="address">Address</p><p class="hidden"></p></li>'); 

注意的是,在最右邊的我有hidden<p>元素。我用這個得到ID,我不想顯示給我的用戶。

這是jQuery來生成這些<li>數據:

$(".box").each(function() { 
    var name, address, picture, id = ""; 
    if (i < result.length) { 
     name = result[i].name; 
     address = result[i].address; 
     picture = result[i].boxpicture; 
     id = result[i].mallid; 
    } 

    $(this).find(".name").html(name); 
    $(this).find(".address").html(address); 
    $(this).find(".picture").attr("src", picture); 
    $(this).find(".hidden").html(id); 
    i++; 
}); 

我試圖檢查數據,其工作的罰款。

現在,可以說,我想提醒隱藏ID,當用戶點擊我上面生成的<li class="box">之一<p>

$(".box").click(function() { 
    alert(document.getElementsByClassName('hidden').innerHTML); 
}); 

然而此警報總是返回「undifined」。

+1

just out of cu riosity。你爲什麼使用普通的JavaScript和jQuery? – putvande

+0

@putvande err.sorry那是因爲我是一個初學者...我會嘗試只使用jQuery:D –

回答

40

document.getElementsByClassName()返回一個nodeList,而不是一個元素!

所以它應該是:

document.getElementsByClassName('hidden')[0].innerHTML 

,並因爲你可能有更多的.hidden元素,只希望當前.box裏面的一個(這將是在事件處理程序this

this.getElementsByClassName('hidden')[0].innerHTML 

但爲什麼不是jQuery

$(".box").click(function(){ 
     alert($('.hidden', this).html()); 
}); 
+2

非常感謝您的幫助:D是的,我會嘗試只使用jQuery:D 所以如果我只是想要使用jQuery,我還需要更改「$(this).find(」。name「)。html(name);」到「$('。name',this).html();」對? –