【问题标题】:jQuery("#"+id) Vs document.getElementById(""+id)jQuery("#"+id) 与 document.getElementById(""+id)
【发布时间】:2013-01-10 09:35:01
【问题描述】:

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

【问题讨论】:

标签: javascript jquery html innerhtml


【解决方案1】:

这样做:

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

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

【讨论】:

  • 他正在逃离:
  • 希望我能再次为您的编辑 +1!这是被硬塞进 id 的元数据 :grr:
  • 绝妙的答案......对我有用 :) 我会尽快接受......谢谢一吨
  • 请注意,这显然比使用 ID 选择器要慢。
  • 这是,恕我直言,矫枉过正,并没有解决他目前的方法为什么不起作用的实际问题。正如@FelixKling 提到的,它也更慢。
【解决方案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

【讨论】:

  • 谢谢.....我也通过从function jq( myid )中删除"#" +来检查......但它仍然不起作用:(
  • @Salil 请注意,您还必须转义 /。看看我是如何在上面的jq 中编辑正则表达式的。
【解决方案3】:

/ 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

【讨论】:

    【解决方案4】:

    最简单的答案似乎是:

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

    【讨论】:

    • 我相信another answer中已经提到过。
    • 是的,这只是为了澄清,我认为这是最好的/最快的方法
    【解决方案5】:

    正确的函数是:

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

    【讨论】:

    • 不,他不想选择函数内的任何元素,他想修改字符串以使其成为合适的选择器。此外,代码会抛出错误,因为 jQuery 没有.replace 方法。
    猜你喜欢
    • 2018-03-26
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多