2013-05-20 21 views
0

我想在jQuery選擇器上調用一個函數。如果在選擇器上調用一個jquery函數,如何在我調用的函數中檢索選擇器?

下面是我在做我的網頁上的內容:

<!DOCTYPE html> 
<head> 
    <meta charset="utf-8"> 
    <title>first</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script type="text/javascript" src="../myplugin.js"></script> 
</head> 
<body> 
    <div class="foo"></div> 

    <script type="text/javascript"> 
    // my custom function 
    $(".foo").addGadget({ "src":"gadgets/menu.html", "param":{"filter":"office"}}, 
     function (error, response) { 
      console.log("hello!!!"); 
     }); 
    </script> 
</body> 
</html> 

所以我希望能夠在$('foo')調用我的自定義功能addGadget()。這適用所有權利:

(function (window, jquery, undefined) { 
    var that = {}; 

    that.addGadget = $.fn.addGadget = function (options, callback) { 
    console.log("I'd like to access my element here"); 
    console.log(this); 
    console.log($(this)); 
    }; 

    return window.myPlugin = that; 
}(window, $)); 

所以我可以打電話都

myPlugin.addGadget(); 
$('.foo').addGadget(); 

問題是,我無法訪問foo我的方法內。

問:
什麼我需要改變,以能夠訪問foo我的addGadget方法裏面?

謝謝!

+0

可能重複的[獲取最初的選擇器裏面的jquery插件](http://stackoverflow.com/questions/5477394/getting-initial-selector-inside-jquery-plugin) – 2013-05-20 15:01:07

+0

你正在傳遞' $'作爲'jquery',然後在函數中使用'$'?另外,'console.log(this)'輸出的是什麼? – Dogbert

+0

@Dogbert:感謝'$/jquery'。 'console.log'不斷輸出'document' - 這就是爲什麼我發佈......只是再次檢查,現在它的工作原理。不知道爲什麼它沒有在之前。 – frequent

回答

2

你可以嘗試使用

that.addGadget = $.fn.addGadget = function (options, callback) { 
    console.log($(this).selector); 
}; 
+0

啊。不知道「選擇器」。謝謝! – frequent

2

還有,人們已經使用了.selector屬性,但我不能肯定這是有史以來正式支持。

無論哪種方式,它現在正式被棄用。

.selector docs

.selector屬性在jQuery的1.7和不建議使用僅保持在jQuery的1.9至需要在jQuery的遷移插件支撐.live()的程度。 它可能會在未來版本中被移除,恕不另行通知。該屬性從來不是一個可以用來獲取當前包含在jQuery集合中的元素集合的選擇器的可靠指示器,因爲隨後的遍歷方法可能已經改變了集合。 需要使用選擇器的插件應該讓調用者在選擇器中作爲插件參數的一部分傳入。

+0

好的。感謝您的澄清。 – frequent

0

正如@Dogbert

console.log(this); 

在評論中提及應返回選擇的函數被調用的。它確實...

+0

不,它不。在你的插件中'this'的值將是包含匹配元素的jQuery對象(如果有的話)。你現在說你*不需要選擇器? – 2013-05-20 15:58:32

+0

困惑。但再次感謝。 – frequent

+0

你對什麼感到困惑?也許我們有一些術語混在一起。可以肯定的是,如果您已經知道這一點,我的道歉,但選擇器是描述DOM中元素(或元素)位置的文本字符串。所以你的例子中的選擇器是字符串'「.foo」'。運行選擇器的結果有時稱爲「選擇」。這將是匹配的DOM元素,如果有的話。所以如果你需要的是包含DOM元素的jQuery對象,那麼你可以在你的插件中使用'this',因爲它會指向jQuery對象。 – 2013-05-21 12:08:39

相關問題