3

id="ftbutton_1357567084/Team:8/User:10/Image:195"ajax が呼び出された後に、その html を置き換えたいdiv の 1 つに次の id があります。

次のようなjQueryを使用してこれを実行しようとすると、機能しません

jQuery("#"+id).html(SOME HTML HERE);

次のコードが機能する場所

document.getElementById(id).innerHTML = SOME HTML HERE;

ID に特殊文字を含めるべきではないことはわかっています

ID attributes should be = after an initial letter (a-z or A-Z), may also use 
periods and colons, in addition to letters, numbers, hyphens, and underscores. 

参照How do I select an element by an ID that has characters used in CSS notation?

しかし、何らかの理由で、サイトと見なされているため、各要素の id を変更できません。

私もフォローしようとしましたが、うまくいきません

function jq( myid ) {
  return "#" + myid.replace( /(:|\.)/g, "\\$1" );
}
jQuery(jq("#"+id)).html(SOME HTML HERE);

これがケースであるかどうかを知りたいだけですが、document.getElementById(""+id)代わりに使用する必要がありjQuery("#"+id)ますか?

または言い換えれば

document.getElementById(""+id)よりも信頼性が高いjQuery("#"+id)ですか?

4

5 に答える 5

7

これを行う:

$('[id="ftbutton_1357567084/Team:8/User:10/Image:195"]');

それは実際には少し興味深い質問です。ほとんどの場合、jQuery は:フィルターを開始していると考え$('div:visible')ており、それが完全な ID であることに気付かずに大騒ぎします。

于 2013-01-10T09:39:09.557 に答える
2

/はメタ文字です。これもエスケープする必要があります

メタ文字 ( など!"#$%&'()*+,./:;<=>?@[\]^`{|}~) を名前のリテラル部分として使用するには、2 つのバックスラッシュでエスケープする必要があります: \\.

したがって、これはうまくいくはずです:

function escape_selector( selector ) {
  return selector.replace( /([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1" );
}

(ローストが彼のコメントで述べたように、同様にドロップする必要があります'#' +。そうしないと、セレクターに 2 回追加します)。

デモ

于 2013-01-10T09:44:58.930 に答える
2

問題は、#2回追加していることです。関数で 1 回、実際のjQuery呼び出しで 1 回。次のようにする必要があります。

function jq( myid ) {
  return "#" + myid.replace( /(:|\.|\/)/g, "\\$1" ); //note that added `/`
}
jQuery(jq(id)).html(SOME HTML HERE); //don't add # again!

少し関係のないヒント:実際の DOM オブジェクトを使用して jQuery インスタンスを開始できることを常に覚えておいてください。

jQuery(document.getElementById(someId)); //this will work
于 2013-01-10T09:49:32.647 に答える
0

最も簡単な答えは次のようです。

function jq( myid ) {
  return $(document.getElementById(myid));
}

jq(myid).html(...);
于 2013-01-10T09:53:55.173 に答える
-4

正しい関数は次のとおりです。

function jq( myid ) {
  return *$("#" + myid)*.replace( /(:|\.)/g, "\\$1" );
}
jQuery(jq("#"+id)).html(SOME HTML HERE);
于 2013-01-10T09:42:31.640 に答える