2016-11-14 104 views
0

我有一個網頁的結構是這樣的:獲取DOM元素使用jQuery

<canvas id="myCanvas"></canvas> 

    @for(var i=0; i<10; i++) { 
    <div class="my-element"> 
     <canvas></canvas> 
    </div> 
    } 

此代碼生成一個主畫布。在它下面,正在生成10個其他動態生成的div。實際上,這個循環只是用來表明我有一些動態生成的代碼。要理解的主要是my-element一塊。

在我的JavaScript,我有以下幾點:

$(function() { 
    var mainCanvas = document.getElementById('myCanvas'); 
    initializeCanvas(mainCanvas); // This works. 

    var dynamicElements = $('.my-element'); 
    for (var i=0; i<dynamicElements.length; i++) { 
    initializeCanvas($(dynamicElements[i])[0]); // This does not work 
    } 
}); 

function initializeCanvas(canvas) { 
    // do stuff 
} 

第一次調用initializeCanvas的作品,因爲我通過在實際的HTML DOM元素。但第二個initializeCanvas,這是多次調用,失敗,因爲它傳遞了別的東西。在這種情況下,如何獲得與document.getElementById返回的元素相同類型的元素?

謝謝!

+0

訣竅是知道什麼jQuery方法返回一個常規的DOM對象而另一些返回一個jQuery對象 – mmcrae

回答

1

首先,這是沒有意義的: $(dynamicElements[i])[0]

你得到jQuery的元素,展開它,然後在jQuery的再次包裝...

你只需要做的就是canvas從元素

dynamicElements.eq(i).find('canvas')[0]應該做的工作

0

您不能爲此使用相同的元素。我建議你克隆它。喜歡;

var dynamicElements = $('.my-element').clone(); 

此外,當您添加更多的元素與我的元素類這將是混亂。你應該確保只用$('。my-element')選擇一個元素。