0

セレクターが渡される前にプレフィックスを挿入するには、メインの jQuery 関数を拡張する必要があります。

例えば

jQuery.prefix = '#newBody ';
jQuery('.content')

と同じだろう

jQuery('#newBody .content')

このコードを実行してみました

window.oldJquery = jQuery;
window.jQuery = window.$ = function( selector, context) {
    console.log('+',selector);
    return oldJquery(selector, context );
}

しかし、私は最後のjQueryオブジェクトです。

**

現在のコードを変更せずに

**

4

7 に答える 7

4

jQueryでそのような機能を認識していませんが、使用できますfind

jQuery('#newBody').find('.content')

関数でラップして、その関数も呼び出すことができます。

function my$(selector) {
  return jQuery('#newBody').find(selector);
}

利用方法:

my$('.content');
于 2012-12-27T16:03:32.237 に答える
2

ラッパーメソッドを作成することをお勧めします。セレクターを受け取る小さなメソッドを作成し、プレフィックスとセレクターを jQuery に渡して結果を返すだけです。

例:

var prefix = '#newBody';

function jqPrefix(selector)
{
  return jQuery(prefix + ' ' + selector);
}

jqPrefix('.content')次に、の代わりに呼び出しますjQuery('.content')

于 2012-12-27T16:04:09.617 に答える
1

(現在のように) 破壊的にならずにこれを行う方法がいくつかあります。1 つの方法は次のようになります。

var $prefix = jQuery('#newBody');
$prefix.find('.content');

別の方法として、おそらくもう少しリソースを消費しますが、それでも非破壊的な方法は次のようになります。

var $Prefix = function(selectors) {
    return jQuery("#newBody " + selectors);
};

$Prefix(".content"); //jQuery("#newBody .content");

編集:特定の要素の子のみになるようにすべてを置き換えたい場合はjQuery、次を試すことができます。基本的に、私たちが行っていることは、すべてを書き直す必要がないように、新しいスコープを作成し、(前のコード スニペットから)jQueryとして変数を再定義することです。$Prefix

var $Prefix = function(selectors) {
    return jQuery("#newBody " + selectors);
};

(function(jQuery){

}($Prefix));
于 2012-12-27T16:05:47.257 に答える
1

あなたがすべきことは、コードを更新することです。次のような正規表現で検索/置換を実行できます。

find: /\$\('(.*?)'\)/ig
replace: $('#newSelector \1') OR $('\1', '#newSelector')

どちらも検索に正しいコンテキストを提供します。

于 2012-12-27T16:13:53.673 に答える
0

$.extendを使用できます。

$.extend($.expr['#'],{
    newBody: function(a) {
        return true;
    }
});

を参照してください。

于 2012-12-27T16:05:16.950 に答える
0

1、2 週間前にも同じような問題がありました。私がしたことは退屈であることが判明しましたが、うまくいきました。正しく行われたことを確認するのは非常に簡単でした。

次のようなコードがあります。

$(something)...

$ の代わりに jQuery を使用した可能性があります。いずれにせよ、それを検索する必要があります。それを回避する方法はありません。jQuery 自体を変更すれば、動作させることができます。JavascriptMVC はコントローラーでそれを行いました。デバッグして、それが機能し、何も壊れていないことを確認するのに長い時間がかかったと思います.

次のようなコードを最初のどこかに置きます。

var $prefix = $('#newBody ');

見つかった各場所で、次のコードに置き換えます。

$(something, $prefix)...

エディタでテキストを挿入または貼り付けるだけであることに注意してください。これは、特にエディタに閉じ括弧を検索してカーソルをその直前に置く機能がある場合は非常に高速です。Eclipse では、検索文字列と置換文字列を正規表現で使用できます。それらは次のようになります (置換文字列のコンマの後にスペースがあります)。

(\$\([^\)]+)\)
\1, \$prefix\)

内部的に (最近の jQuery バージョンでは)、これはまったく同じであることに注意してください。

$prefix.find(something)...

それは私にとってはうまくいきました。繰り返しますが、デバッグはそれほど難しくありませんでした。さらに、他の jQuery 呼び出しを台無しにしませんでした。

このStackOverflowの質問には、この形式のjQueryセレクターに関するコメントがあります

于 2012-12-27T17:16:30.600 に答える
0

最も簡単で、最も安全で、... 賢明な方法は、jQuery を上書きするのではなく、目的の機能にラッパーを使用することです。
他の回答で述べたように、現在のセレクター ( などjqPrefix) にプレフィックスを追加するラッパーを作成するか、セレクター自体のラッパーを作成できます。

var $$ = getSelector = function(){
    return '#id ' + s;
};

t セレクターを単純な文字列として jQuery に渡す代わりにgetSelector、セレクターを最初の引数として関数呼び出しを 渡すことができます。

$($$('.some-class'))

に変換されます

$('#id .some-class')
于 2012-12-27T16:17:27.347 に答える