2016-10-07 13 views
2

jQueryを使用して非常に奇妙な動作が発生しました。私はこのようなfunctionを持っている:なぜ= - セレクタの結果の代わりにすべてを選択する

  function refreshTechBubble(techID, value) { 
       $("span.top-right-data[data-id=" + techID + "]").html(value); 
      } 

このfunctionは、特定の技術者バブルを更新します。よりシンプルで技術的にするために、この関数が"span.top-right-data[data-id=" + techID + "]"のセレクタで一意的に見つかったspanの内部htmlを変更することを述べましょう。これは非常に素晴らしく、すべてが適切に機能します。

はしかし、これを実施している間、私はタイプミスをしたと私はこの間違った実装だった:私は代わりにの=を書かれていることを

  function refreshTechBubble(techID, value) { 
       $("span.top-right-data[data=id=" + techID + "]").html(value); 
      } 

お知らせ - 事故によるを。修正は簡単ではありませんが、私はこの時点で解決すべき問題はありませんが、テスト中に経験した動作の原因については疑問を抱いています。このようなタイプミスでは、jQueryがタグを見つけられず、その結果内部HTMLをリフレッシュしないことが予想されますが、代わりにspanの内部HTMLをのtop-right-dataに更新しました。なぜ私は予期した動作ではなく、修正前にこの動作を経験しましたか?

+0

あなたはバグとして報告したいと思うでしょう。私の推測では、彼らは単純に無効なセレクタを無視します。 – Bergi

+2

すぐに構文エラーが発生します。 – Xufox

+1

しかし、 'フィーチャー'私の友人;) –

答えて

2

これは、1.7までのjQueryの一部であったSizzleの旧バージョンのバグです。これは1.8のSizzleリライトで修正されました(release notesで修正されたバグの中にはリストされていませんが)。

興味深いことに、jQueryのすべてのバージョンは、属性セレクタが単独で表示されるか、明示的な汎用セレクタによって修飾されると、SYNTAX_ERRを正しくスローするように見えます。それは、属性セレクタがSYNTAX_ERRを引き起こさない他の単純なセレクタ(その前または後ろに現れる)によって修飾されている場合のみです。

関連する問題