33

連鎖関数を持つjQueryセレクターがあります。

関数内で、セレクターの式を表すTEXTにアクセスしたいと思います。

$("cat dog").function() {

    // how do I get access to the "cat dog" string from inside THIS function ?
};

このコードサンプルでは、​​実際にやりたいことを単純化しすぎています。プラグインを作成していますが、ラップされたセットが作成されたセレクターにアクセスする必要があります。明らかに、この特定の例では、私が書いたので「猫の犬」にアクセスできます。したがって、これがプラグインに含まれていることを想像してみてください。

これをグーグルで検索するのは少し注意が必要です。

編集: 'selector'プロパティは、残念ながら非推奨になりました。http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects

4

9 に答える 9

18

jQueryオブジェクトには「selector」属性がありますが、常に使用できるかどうかはわかりません。

于 2009-02-01T05:18:52.107 に答える
8

これは最適とは言えませんが、場合によっては機能します。次のことができます。

jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function( selector, context ) {
    return (typeof selector === 'string') ? jQuery.fn._init(selector, context).data('selector', selector) : jQuery.fn._init( selector, context );
};

jQuery.fn.getSelector = function() {
    return jQuery(this).data('selector');
};

これは、要素に使用された最後のセレクターを返します。ただし、存在しない要素では機能しません。

<div id='foo'>Select me!</div>
<script type='text/javascript'>
 $('#foo').getSelector(); //'#foo'
 $('div[id="foo"]').getSelector(); //'div[id="foo"]'
 $('#iDoNotExist').getSelector(); // undefined
</script>

これは、jQuery 1.2.6 と 1.3.1、およびおそらく他のバージョンで動作します。

また:

<div id='foo'>Select me!</div>
<script type='text/javascript'>
 $foo = $('div#foo');
 $('#foo').getSelector(); //'#foo'
 $foo.getSelector(); //'#foo' instead of 'div#foo'
</script>

編集
セレクターが使用された直後に確認すると、プラグインで次を使用できます。

jQuery.getLastSelector = function() {
    return jQuery.getLastSelector.lastSelector;
};
jQuery.fn._init = jQuery.fn.init
jQuery.fn.init = function( selector, context ) {
    if(typeof selector === 'string') {
        jQuery.getLastSelector.lastSelector = selector;
    }
    return jQuery.fn._init( selector, context );
};

次に、次のように動作します。

<div id='foo'>Select me!</div>
<script type='text/javascript'>
 $('div#foo');
 $.getLastSelector(); //'#foo'
 $('#iDoNotExist');
 $.getLastSelector(); // #iDoNotExist'
</script>

プラグインで次のことができます。

jQuery.fn.myPlugin = function(){
 selector = $.getLastSelector;
 alert(selector);
 this.each( function() {
  //do plugins stuff
 }
}

$('div').myPlugin(); //alerts 'div'
$('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist'

それでも:

$div = $('div');
$('foo');
$div.myPlugin(); //alerts 'foo'
于 2009-02-01T18:26:29.270 に答える
3

ファイアバグを使用している場合はconsole.log(this)、関数内でセレクター文字列がオブジェクトのどこかにアクセスできるかどうかを確認できます。申し訳ありませんが、jQueryAPIに精通していません。

于 2009-02-01T05:09:55.463 に答える
2

これは、関数でセレクター文字列にアクセスする場合に機能します。

$(this).html();

これは、複数のセレクターが使用されている場合にも機能します。

例えば、

$('#id1,#id2').click(function(){
   alert($(this).html());
});
于 2012-10-12T05:38:47.760 に答える
1

多分これはあなたの問題を解決します:

var $jqueryItems = $( ".my-selector" );
console.log( $jqueryItems.selector ); // display ".my-selector"
于 2013-07-10T07:53:39.480 に答える
1

jQuery に与えられたプラグイン セレクター文字列の内部に入りたい人のために、@Pim Jager によって与えられた素晴らしい答えを改善できてうれしく思います。

  1. 現在 (最新バージョン 3.2.1) では、jQuery.fn.init 関数には 3 つの引数があります - selector, context, root2 つではありません。
  2. newjQuery.fn.init;の return ステートメントにキーワードを追加する必要があり ます。
  3. プラグイン内では、呼び出しによってセレクターが文字列として返されます。 $(this).getSelector();

最後に、それは私が魅力のように私のために働かなければならないものです:

(function($, window, document, undefined) { 
    $.fn._init = $.fn.init
    $.fn.init = function( selector, context, root ) {
        return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init( selector, context, root );
    };
    $.fn.getSelector = function() {
        return $(this).data('selector');
    };
    $.fn.YOUR-PLUGIN = function() {
        var selector = $(this).getSelector(); // selectors string given to jQuery 
        // other code
    }
})(jQuery, window, document);

私に関する限り、jQuery のバージョン (1.7.0 から 3.2.1 まで) で動作します。

PS。こちらのstackoverflowでも利用可能なjQuery 1.2.3でも問題なく動作します。したがって、jQuery セレクターの式をプラグイン内のテキストとして取得する場合は、すべての jQuery バージョンで次のようにすれば問題ないと思います。

// our plugin
(function($, window, document, undefined) { 
    $.fn._init = $.fn.init
    $.fn.init = function( selector, context, root ) {
        return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init( selector, context, root );
    };
    $.fn.getSelector = function() {
        return $(this).data('selector');
    };
    $.fn.coolPlugin = function() {
        var selector = $(this).getSelector(); 
        if(selector) console.log(selector); // outputs p #boldText
    }
})(jQuery, window, document);

// calling plugin
$(document).ready(function() {
    $("p #boldText").coolPlugin();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<p>some <b id="boldText">bold text</b></p>

于 2017-08-11T14:15:27.820 に答える
0

関数にバインドされているときに $('value_i_want_here') 内に提供されたセレクターの文字列値への参照を取得する方法がわかりませんでした。難しい問題のようです。ただし、IE[x] でテストしたい場合は、console.log(var|val) を利用して非常にうまく機能するFirebug Liteが常にあります。

于 2009-02-01T19:51:47.740 に答える
-2

さて、あなたが要素名を取得しようとしているかどうかを私はまだ理解しようとしていますか?またはIDおよび/またはクラスまたはそのすべて。

これで要素を取得できます

var element = $(this).get(0);
var id = $(this).attr('id');
var class = $(this).attr('class');

複数のクラスがある場合はどうなるかわかりません。配列か何かに入るかもしれません、そしてあなたはそれをインデックスで得ることができます。

于 2009-02-01T05:43:14.023 に答える