2016-07-26 29 views
0

我需要調用多的jQuery的。每個()函數對象是這樣的:在一個jQuery使用預先定義的功能。每個調用

$('#table_1').each(function(){ /* foo */ }); 
$('#table_2').each(function(){ /* foo */ }); 
$('#table_3').each(function(){ /* foo */ }); 

我還沒有發現這樣做比一個更好的辦法分別寫出每個功能。

定義這樣的功能:

$.fn.extend({ 
    foo: function() { 

     //Some code 
    } 
}); 

$('#table_1').each(foo); 

在控制檯返回「無法讀取屬性‘稱之爲’未定義功能」的錯誤。

我在這裏做錯了什麼?

+0

只是foo定義爲常規功能,它會工作。 – user1751825

+2

'var foo = function(){}; $(「#table_1,#table_2,#table3」)。each(foo);' – nnnnnn

回答

1

foo在此包裝外面不可見,您只能用jquery對象調用它。

而不是內部

$.fn.extend({ 

包裝簡單地讓它

var foo = function() { 
    //Some code 
} 

function foo() {  
    //Some code 
} 
+0

爲什麼不只是...函數foo()... – user1751825

+0

@ user1751825是的,這也將工作 – gurvinder372

1

$.fn.extend要擴展jQuery對象,但你只需要創建一個簡單的函數

var foo = function(position, obj) { 
    console.log('iterated object:', obj); 
} 

$('#table_1').each(foo); 
1

如果你想對每個元素直接調用foo功能:

$('#table_1, #table_2, #table3').each(function() { 
    $(this).foo(); 
}); 

,我建議你可以把這些元素共同類和這個類中進行選擇:

$('.commonClass').each(function() { 
    $(this).foo(); 
}); 

或者你可以在foo函數中做迭代:

$.fn.extend({ 
    foo: function() { 
    return this.each(function() { 
     // Do your stuff here 
    }); 
    } 
}); 

並初始化這樣的:

$('.commonClass').foo(); 

foo()變成文字顏色在紅色爲每個選定的元件

$.fn.extend({ 
 
    foo: function() { 
 
    return this.each(function() { 
 
     this.style = 'color:red'; 
 
    }); 
 
    } 
 
}); 
 

 
// Call the function without each() 
 
$('li').foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<ul> 
 
    <li>Test</li> 
 
    <li>Test</li> 
 
    <li>Test</li> 
 
</ul>

0

只需使用普通的「原生」功能即可。請記住,jQuery會顛倒參數的順序,因此您首先獲取索引,然後獲取元素(同樣在上下文this中)。

function doSomething(i, el){ 
    $(el).html('I was changed ' + i); 
} 
$(div).each(doSomething); 

的jsfiddle:https://jsfiddle.net/sdc2a011/

相關問題