4

URLのハッシュを動的に読み取り、jQueryを介してページ上のアイテムを選択するAnythingSliderjQueryプラグインを使用しています。問題は、エンドユーザーがhttp://mydomain.com/#!demos/sliderにアクセスした場合にプラグインを壊す可能性があることです。

jQueryをクラッシュさせる代わりにセレクターが有効かどうかをテストする方法はありますか(組み込み関数または正規表現)?$('#!demos / slider')を実行しようとするとクラッシュする次のjsFiddleの例を参照してください:http://jsfiddle.net/PvY2b/

$('#!demos/slider') <= Uncaught Error: Syntax error, unrecognized expression: #!demo/slider
4

3 に答える 3

5

ID および NAME トークンは文字 ([A-Za-z]) で始まる必要があり、その後に任意の数の文字、数字 ([0-9])、ハイフン ("-")、アンダースコア ("_") を続けることができます、コロン (":")、およびピリオド (".")。

From:基本的な HTML データ型

したがって、次のようなものが機能する可能性があります。

if (/^[A-Za-z][A-Za-z0-9\-_:\.]*$/.test(selector)) {
    // $('#' + selector)...
}

または単にエスケープします。

selector = selector.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
于 2012-12-20T19:47:35.160 に答える
1

次のように、このブロックを try-catch にラップするだけの方が簡単な場合があります。

try { 
  $('#!demo/pages') 
} catch(e) { 
  alert('Your selector is invalid'); 
}

これは怠惰なハックではありません。直接制御できない外部コンポーネントを処理する場合、これは非常に一般的なアプローチです。

于 2012-12-20T19:50:08.727 に答える
0

前の回答で見つかったように:セレクターが見つからないときに警告するように jQuery のセレクター エンジンを拡張するにはどうすればよいですか?

jQuery init を拡張する必要があります。

var oldInit = $.fn.init; // cache it

$.fn.init = function(selector, context, rootjQuery) {

    var result = new oldInit(selector, context, rootjQuery);

    if (result.length === 0)
        console.info("jQuery call has no elements!", arguments);
    return result;
};

構文が正しくないセレクターに対してはエラーがスローされますが、正しいセレクターがあると$('#test')しましょう。#test が存在しない場合は、少なくとも警告が表示されます。開発、タイプミスなどに役立ちます

私はこれを.on()他のものでやったことがありますが、それは非常に強力です。

于 2012-12-20T19:51:22.387 に答える