雖然.querySelectorAll
是一個很好的解決方案,瞭解如何做到這一點的處理是很重要的沒有它。
您只需要一個內循環來循環變量elemento
變量所保存的當前元素集a
。
var elemento;
var y = document.getElementsByClassName("thumbnails");
var handler = function(){alert("jo")};
for (var i=0; i < y.length; i++) {
elemento = y[i].getElementsByTagName("a");
for (var j = 0; j < elemento.length; j++) {
elemento[j].addEventListener('click', handler, false);
}
}
請注意,我用不同的計數器j
爲內環,因爲i
已在使用。
另請注意,我將處理函數移到了循環外的變量中。這使得所有的元素使用相同的函數對象,這是更高效的。
旁註:
您可能還需要創建一些輔助方法,將縮短長方法名稱,並將其轉換爲陣列。這使您可以使用數組方法,如.forEach()
。
var _slice = Function.call.bind([].slice);
function byClass(ctx, clss) {
if (typeof ctx === "string") {
clss = ctx;
ctx = document;
}
return _slice(ctx.getElementsByClassName(clss));
}
function byTag(ctx, tag) {
if (typeof ctx === "string") {
tag = ctx;
ctx = document;
}
return _slice(ctx.getElementsByTagName(tag));
}
這降低了代碼這樣:
var handler = function(){alert("jo")};
byClass("thumbnails").forEach(function(thumb) {
byTag(thumb, "a").forEach(function(a) {
a.addEventListener('click', handler, false);
});
});
我推薦使用[jQuery的](http://jquery.com/):'$( '縮略圖' ).click(function(){...})' –
不要使用像jQuery這樣的大型庫來完成這些超級簡單的小任務。 –
會請顯示html嗎?我相信你的代碼非常好。 – theBeacon