Javascript jQuery(“+id”)与document.getElementById(“+id”)的比较

Javascript jQuery(“+id”)与document.getElementById(“+id”)的比较,javascript,jquery,html,innerhtml,Javascript,Jquery,Html,Innerhtml,我的一个div id=ftbutton_1357567084/Team:8/User:10/Image:195我想在调用ajax后替换它的html 当我尝试使用jQuery执行此操作时,像下面这样的操作是行不通的 jQuery("#"+id).html(SOME HTML HERE); 下面的代码在哪里工作 document.getElementById(id).innerHTML = SOME HTML HERE; 我知道ID不应该包含一些特殊字符 ID attributes should

我的一个div id=ftbutton_1357567084/Team:8/User:10/Image:195我想在调用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. 
参考号

但由于某些原因,我无法更改每个元素的id,因为它被认为是站点

我也试过跟随,但不起作用

function jq( myid ) {
  return "#" + myid.replace( /(:|\.)/g, "\\$1" );
}
jQuery(jq("#"+id)).html(SOME HTML HERE);
我只是想知道如果是这种情况,我是否需要使用document.getElementById+id来代替jQuery+id

或者换句话说

是文档。getElementById+id比jQuery+id更可靠?

执行以下操作:

$'[id=ftbutton_1357567084/团队:8/用户:10/图像:195]


这实际上是一个有点有趣的问题。最有可能的是jQuery认为:正在启动一个过滤器,如$'div:visible',并没有意识到它是一个完整的ID而感到紧张。

正确的函数是:

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

要使用任何元字符,如!$%&'*+,./:@[\]^`{124;}~作为名称的文字部分,必须用两个反斜杠转义:\\

所以这应该很好:

function escape_selector( selector ) {
  return selector.replace( /([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1" );
}
同样,您也需要删除+号,否则将其添加到选择器中两次


问题是,您要添加两次。一次在函数中,一次在实际的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

最简单的答案似乎是:

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

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

也要逃离这个世界。中列出的所有角色。请执行一个操作,然后您可以使用id玩游戏,看看是否是您的特殊角色不起作用!类似的问题:在jq函数中,您不应该返回额外值,因为它会使您使用时加倍。这是在逃避:虽然。希望我可以再次+1进行编辑!这是塞进id中的元数据:grr:难以置信的答案……对我有效:我会尽快接受……谢谢TonJust注意,这显然比使用id选择器慢。这是,IMHO,杀得过火了,并没有解决为什么他当前的方法不起作用的实际问题。正如@FelixKling所提到的,它的速度也较慢。不,他不想选择函数中的任何元素,他想修改字符串,使其成为一个合适的选择器。此外,代码会抛出错误,因为jQuery没有.replace方法。谢谢…..我也通过从函数jq myid中删除+进行检查……但仍然不起作用:@sail注意,您还必须转义/。看看我是如何在jq中编辑正则表达式的。我相信这已经在中提到了。是的,这只是为了澄清,我认为这是最好的方法/最快的方法