jQuery(“#”+ id)vs document.getElementById(“”+ id)

时间:2013-01-10 09:35:01

标签: javascript jquery html innerhtml

我有一个div id="ftbutton_1357567084/Team:8/User:10/Image:195"后面的id我希望在调用ajax后替换它的html。

当我尝试使用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)更可靠吗?

5 个答案:

答案 0 :(得分:7)

这样做:

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

这实际上是一个有趣的问题。很可能jQuery认为:正在启动一个过滤器,比如$('div:visible')并且没有意识到它是一个完整的ID。

答案 1 :(得分:2)

/ is a meta character, you have to escape it as well

  

要使用任何元字符(例如!"#$%&'()*+,./:;<=>?@[\]^`{|}~)作为名称的文字部分,必须使用两个反斜杠进行转义:\\

所以这应该可以正常工作:

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

(作为roasted mentioned in his comment,您还需要删除'#' +,否则将其添加到选择器两次。

DEMO

答案 2 :(得分:2)

问题是您要添加#两次。一旦进入该功能,一次进入实际的jQuery通话。应该是这样的:

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

答案 3 :(得分:0)

最简单的答案似乎是:

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

jq(myid).html(...);

答案 4 :(得分:-4)

正确的功能是:

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