jQuery("#"+id) Vs document.getElementById("&q

jQuery("#"+id) Vs document.getElementById(""+id)

本文关键字:quot document getElementById Vs jQuery +id      更新时间:2023-09-26

我有一个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)更可靠吗?

这样做:

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

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

问题是您添加了两次#。一次在函数中,一次在实际的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 escape_selector( selector ) {
  return selector.replace( /([!"#$%&'()*+,./:;<=>?@'[''']^`{|}~])/g, "''$1" );
}

(正如他在评论中提到的,您还需要删除'#' +,否则您需要将其添加到选择器中两次(。

DEMO

最简单的答案似乎是:

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

正确的函数是:

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