2012-09-26 39 views
1

我想知道是否有更好的方法來處理多個函數調用。基本上我有一個函數,接受和元素作爲參數之一,以及一些屬性。我必須在幾個元素上調用這個函數...jQuery更好的方法來調用多個元素的功能?

function positionMe(element,position){ ... } 

positionMe(obj1,top); 
positionMe(obj2,left); 
positionMe(obj3,bottom); 
positionMe(obj4,right); 
positionMe(obj5,bottom); 

只看代碼看起來好像我在做一些真正錯誤的事情。起初我以爲我可能能夠傳遞一組元素,但似乎並不奏效。有任何想法嗎?

+1

爲什麼不能通過陣列中的所有元素在通過它同時和循環? – PeeHaa

+0

我只是把循環內的函數,或建立一個元素的數組,並把我打電話給功能的循環?謝謝! – Aaron

+0

函數 – PeeHaa

回答

2

隨着你提供我會通過它創​​建自己的函數中的所有需要​​的信息和循環數組的信息:

function positionMe(elements) 
{ 
    for(var i = 0, numberOfElements = elements.length; i < numberOfElements ; i++) { 
     // Do stuff with the objects you want to do in here 

     // access the current object 
     console.log(elements[i].object); 

     // access the current direction 
     console.log(elements[i].direction); 
    } 
} 

var yourObjects = [ 
    { 
     object: obj1, 
     direction: 'top' 
    }, 
    { 
     object: obj2, 
     direction: 'left' 
    }, 
    { 
     object: obj3, 
     direction: 'bottom' 
    }, 
    // etc 
]; 
positionMe(yourObjects); 

UPDATE

由於Reflective commented

更適合(var i元素){console.log(elements [i] .object);}

這不是數組在javascript中的情況。那不是那麼簡單。因爲你最終還會遍歷數組對象的所有繼承的東西,例如, pop(),push()等。有一種方法可以通過the use of hasOwnProperty()來防止這種情況。

另一種方法是使用forEach(),它可以在JavaScript 1.6中使用。所以我不認爲所有的用戶代理已經內置了對此的支持。

+0

裏面最好使用'for(var i in element){console.log(elements [i] .object);}' – Reflective

+1

其實沒有。你也會得到比你定義的東西更多的東西(比如繼承屬性)。除非你將它與'hasOwnProperty'結合使用。爲什麼會更好? – PeeHaa

+0

因爲'for(var i in elements){...}'與'for(var i = 0,numberOfElements = elements.length; i Reflective

0

如果您的對象是頁面上的元素,您可以使用jQuery的$ .each()函數在每個事件上運行該函數。語法會工作,如:

$('selector that grabs all objects').each(positionMe($(this), position)); 
2
<script src="http://code.jquery.com/jquery-latest.js"></script> 

<script> 

var objArray = [ 
["obj1","top"], 
["obj2","bottom"], 
["obj3","middle"] 
]; 

$.each(objArray, function(i, v) {positionMe(v[0], v[1]);}); 

function positionMe(element, val) { 
    alert (element+":"+val); 
} 

</script> 
相關問題