2012-01-08 44 views
0

我想開始學習OO的JS和有一個簡單的問題(我簡化了我的實際問題)。JavaScript的對象字面量和jQuery的每個

基本上,下面的警報剛剛返回[Object對象],我希望它返回3個不同的警報框

<body> 

    <div id="bob"> 
     <div>f</div> 
     <div>t</div> 
     <div>q</div> 
    </div> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script> 
    $(document).ready(function() { 

     var Person = { 
      name: $('#bob div').each(
       function(){ 
        $(this).text(); 
       } 
      )     
     } 
     alert(Person.name); 

    }); 
    </script> 

</body> 

大加讚賞任何指導。

Adi。

+0

您的代碼會將'$('#bob div')。each(...)'的返回值賦給Person.name,它是一個jQuery對象。 – 2012-01-08 21:20:20

回答

0

也許你可以做這樣的事情:

var Person = { 
    alertNames: function() { 
     $('#bob div').each(
      function(){ 
       alert($(this).text()); 
      } 
     ); 
    }; 
} 
Person.alertNames(); 

注意,雖然,在與一個大寫字母開頭的JavaScript名稱(在這種情況下,Person)通常保留給構造函數(即功能用於使用關鍵字new創建新實例)。這些通常被稱爲類型,因爲名稱將是誤導。

如果你想使你的代碼真正的面向對象的,你可以嘗試這樣的:

var Person = function(name) { 
    var container = $('#' + name); 

    this.alertNames: function() { 
     $('div', container).each(
      function(){ 
       alert($(this).text()); 
      } 
     ); 
    }; 
} 
var bob = new Person('bob'); 
bob.alertNames(); 

推薦閱讀:

0

In javascript alert盒子不是你回來的東西。這是你打電話,彈出警報。所以如果你想要3個警報,你需要調用alert函數3次。目前,你只需要調用一次。

我懷疑你試圖連接選擇器的結果。在這種情況下使用.map代替.each

var Person = { 
    name: $('#bob div').map(function() { 
     return $(this).text(); 
    }).get().join(',')     
}; 
alert(Person.name); 

另一種可能性是將警報.each回調裏面。

+0

如果你想連接內容,你還必須添加'.get()。join()'。 – 2012-01-08 21:21:09

+0

@FelixKling,好點。考慮到更新的答案。 – 2012-01-08 21:22:36