2014-05-25 33 views
0

所以我試圖存儲一個jQuery選擇器內的變量,但我的代碼不工作時,我使用它,但它的工作原理時,我直接鍵入選擇器。將jQuery選擇器存儲到變量中不起作用?

下面是不起作用的代碼:

$(function(){ 
    selector = $('.mtitle'); 

    for (var i=0; i<10; i++){ 
     $('div').append('<h1 class="mtitle">Loading...</h1>'); 
    } 
    for (var j=0; j<10; j++){ 
     selector.html("hi"); 
    } 
}); 

而這裏的,做的工作代碼:

$(function(){ 
    selector = $('.mtitle'); 

    for (var i=0; i<10; i++){ 
     $('div').append('<h1 class="mtitle">Loading...</h1>'); 
    } 
    for (var j=0; j<10; j++){ 
     $('.mtitle').html("hi"); 
    } 
}); 

什麼我錯在這裏做什麼?

感謝

+0

你的問題使得完全沒有意義。 –

回答

4

當你在一個變量緩存jQuery選擇它存儲返回的當前jquery對象。 因此,當您第一次緩存該變量時,隨後添加它們時,DOM中沒有.mtitle元素。 它不僅僅是一個你正面臨的概念問題的錯誤!

2

這不是你的意圖完全明確的給我,但我相信要更換所有的Loading...hi。但是,當你調用這個:

selector = $('.mtitle'); 

你沒有存儲選擇,而是一套組件,比賽選擇。當您將追加選擇與此代碼相匹配的多個元素:因爲選擇已經執行

$('div').append('<h1 class="mtitle">Loading...</h1>'); 

selector變量不會包含新的h1元素的引用。

第二個代碼起作用,因爲匹配元素的選擇已完成新元素已創建。

但是,如果你刪除的第二for循環,將工作一樣好,因爲這個調用實際上取代了內容每.mtitlehi

$('.mtitle').html("hi"); 
0

其他人已經描述了爲什麼這是行不通的,但是這是你所需要的改變,以得到它的工作

$(function(){ 
    selector = '.mtitle'; // the actual selector, not the object(s) 

    for (var i=0; i<10; i++){ 
     $('div').append('<h1 class="mtitle">Loading...</h1>'); 
    } 
    for (var j=0; j<10; j++){ 
     $(selector).html("hi"); // search the DOM as it is now using the selector 
    } 
}); 
+0

但爲什麼這麼麻煩呢?將選擇器存儲在字符串中有什麼意義?另外,第二個「for」是毫無意義的。 –

+0

如果選擇器字符串更改或最終成爲選擇器列表,該怎麼辦?我們不知道OP的計劃。 – Popnoodles

+0

你對第二個「for」是對的。這是值得指出的,但這顯然只是一個小的測試代碼,讓選擇器工作的更大的目的,所以我會離開它。爲什麼有人會把「正在加載...」然後立即替換它? – Popnoodles