2010-08-16 75 views
2

當我保存一個jQuery對象在一個變量,像這樣:jQuery的對象不工作

var $myObject = $("div#comments"); 

...我不能使用對象$ myObject的!

這是我在做什麼改變DIV#評論的HTML:

$myObject.html(data); 

它什麼都不做。我已經嘗試過這種方式也一樣,這一次,選擇裏面的div#註釋的元素:

$("div.comment", $myObject); 

它不工作。

我只想保存一個元素在一個變量中,然後使用它

注意:有些人不把$放在變量名之前,像這樣:myObject。

+0

您正在做其他事情;這應該工作 – 2010-08-16 19:06:24

回答

6

你打電話給該文件被加載?

 // This will ensure that the code doesn't run until 
    // the document has loaded 
$(function() { 
    var $myObject = $("div#comments"); 
}); 

(這是爲jQuery的.ready()方法的快捷方式。)

只要文件被加載,並且您有與該ID comments一個<div>在頁面加載時,它應該工作。

還要記住,在頁面上只能有一個元素與任何給定的ID。正因爲如此,$("#comments");而不是$("div#comments");其實更好一些(更快)。

+0

你不是指'$(document).ready(function(){// stuff});'? – 2010-08-16 19:09:11

+0

@Aayay - 好的,沒有。這是同一件事的捷徑。 :o) – user113716 2010-08-16 19:09:56

+0

哦,我看到了,可以請一些人告訴我如何讓代碼看起來像代碼:D在評論中..上述評論是尷尬 – 2010-08-16 19:10:55

1

你只有提供代碼的snippits,所以它是不可能告訴是肯定的,但賠率是,你正在運行中的<div>元素之前出現<script>元素的代碼,並沒有做任何事情(如使用ready事件)來延遲代碼的執行直到div存在。

結果是你得到一個沒有找到元素的jQuery對象。移動腳本元素,使其位於div後面。 Just before the end tag for the body是個好地方。

1

語法是完全有效的,應該工作。你是否動態追加評論div?你應該alert($myObject.length)看看它是0還是1,如果它的0表示它從來沒有拿起。

您可能需要綁定var語句,直到dom就緒,窗口加載或ajax回調之後。

1

那麼,該語法是非常好的,所以其他事情正在進行。你能顯示你的標記嗎?如果你添加一個警報($ myObject.length),你會得到什麼?還有最後一件事要檢查......你是否在一個準備就緒的處理程序中運行它?

0

好的,謝謝大家。 我得到了解決方案。

我想到了東西在DOM中加載的順序並找到了解決方案。 問題(有標記)是:

<div id="comments">  
    <script type="text/javascript"> 
    loadComments(params); 
    </script> 
</div> 

上面的代碼被寫了PHP! 因此,只要瀏覽器讀取代碼,它就會執行該功能。 我已經嘗試將該腳本放在頁面末尾,之後,該功能被稱爲。功能尚未定義。

所以,函數loadComments應該在div準備好之後執行並且在函數定義之後執行。

我包裹標籤之間的代碼用。就緒(),是這樣的:

<script type="text/javascript"> 
$(function() { 
    loadComments(params); 
}); 
</script> 

這是一個分心。 對不起大家! 非常感謝。

如果你有同樣的問題,你不明白我做了什麼,問我。 XD