0

私がする時

var foo = $('n');
console.log(foo);

jQueryオブジェクトを取得します。しかし、私がそうする場合:

var bar = $(' ');
console.log(bar);

次に、Firefoxで「構文エラー、認識されない式:」エラーメッセージが表示されます。

なんで?

4

3 に答える 3

1

jQueryオブジェクトの引数が文字列の場合、有効なCSSセレクターまたは検出可能なHTMLタグのいずれかである必要があります。検出可能なHTMLタグではないため(文字列にとで囲まれたHTMLタグがないため<>、CSSセレクターとして文字列を処理しようとします。

しかし、jQuery内のSizzleセレクターエンジンは、それが無効なCSSセレクターにあることを検出し、例外をスローします。トリガーされているjQuery内にこのコードが表示されます。

Sizzle.error = function( msg ) {
    throw new Error( "Syntax error, unrecognized expression: " + msg );
};

これはHTMLの有効なスニペット'&nbsp;'ですが、jQueryは、CSSセレクターを渡そうとしているのかHTMLタグを渡そうとしているのかを判断できる必要があります。そのために、HTMLとCSSセレクターを区別するために、オープンタグ文字とクローズタグ文字を検索し、<HTMLタグの一般的な場所を検索します。>あなたの場合、あなたはそのテストに失敗するので、CSSセレクターとしてあなたの文字列を処理しようとします(そうではありません)ので、失敗します。

有効な引数をjQueryに渡す必要があります。HTMLを渡す場合は、次のようにします。

var bar = $('<span>&nbsp;</span>');

これが機能する理由:

var foo = $('n');
console.log(foo);

'n'それは有効なCSSセレクターですか。<n>ドキュメントにタグがない限り、おそらくドキュメント内の何にも一致しませんが、有効なCSSセレクターです。

于 2012-08-21T08:35:52.293 に答える
1

これは、jQueryオブジェクトがdom要素のラッパーであると想定しているためです。合格'&nbsp'すると、dom要素を作成できないため、エラーがスローされます。ただし、タグはなくn、を$('n').length与え0ます。だから私はそれがjQueryの問題のパーサーだと思います。

于 2012-08-21T08:24:03.550 に答える
0

簡単に言うと、jQueryはsizzleセレクターエンジンを使用しており、そのエンジンは。をどう処理するかを認識していません&nbsp;

于 2012-08-21T08:25:50.790 に答える