2012-06-19 39 views
0

假設我已經創建了一個jQuery函數來檢查是否元素存在或不喜歡:關於jQuery函數的調用機制

jQuery.fn.exists = function() { 
    return this.length > 0; 
} 

然後我打電話:

if ($("#MyDiv").exists() == false) 
    alert('not exist'); 
else 
    alert('exist'); 

如果我致電上述jQuery函數有用。但是我們不能像這樣調用jquery函數exists('#MyDiv')?如果我嘗試這樣調用,那麼我沒有得到結果...爲什麼?

+1

除非你已經定義了一個函數'exists',你不能調用它(顯然是?)。當然,您可以輕鬆定義一個接受選擇器並執行與您在$ .fn.exists中定義的操作相同的操作。或者我錯過了什麼? –

+0

@FelixKling。我們所缺少的是什麼,這個函數有什麼好處...... – gdoron

+0

@gdoron:我同意你的觀點,在這種特殊情況下這種方法是不必要的,但問題依然存在(imo),除了方法是在做。 –

回答

1

嘗試像下面,

$.exists = function (selector) { 
    return $(selector).length > 0; 
} 

和使用,

$.exists('#test') 

DEMO:http://jsfiddle.net/skram/hgaPt/1/

請一個更大的圖片作爲存在使用此功能,使用它簡單的事情只是一個矯枉過正的問題。

+0

爲什麼你沒有指定jQuery.fn.exists = function(){)這樣的jquery函數原型,而是寫了像$ .exists = function(selector){)這樣的代碼。 jQuery.fn關鍵字是可選的。請討論 – Thomas

2

ARRG請不要用這個沒用的exist函數!

它可以簡單地用:

if ($('#MyDiv').length) 
    // Exist 
else 
    // Doesn't exist. 

無插件需要,每個人都知道這是什麼代碼呢,不要使用exist

+0

我不認爲這是問題的關鍵。我認爲「存在」只是一個例子。 –

+2

@火箭。我不這麼認爲,看看[這個問題](http://stackoverflow.com/q/31044/601179)看看有多少人喜歡那種無用的功能。 – gdoron

+0

「語法糖會導致分號的癌症。」 - 阿蘭玻璃市 –

0
exists('#MyDiv') 

這是行不通的,因爲你沒有創建一個名爲exists功能。你做了一個叫jQuery.fn.exists的函數(jQuery.fn是jQuery對象的prototype)。

要使exists('#MyDiv')正常工作,您需要創建一個名爲exists的函數。

function exists(sel){ 
    return $(sel).length; 
} 
0

$.fn等於$.prototype,所以間接使用$.fn你是掛鉤的功能jQuery對象原型,所以選擇需要傳遞給jQuery對象而不是鏈接功能名稱。