Javascript jQuery字符串变量作为id选择器返回空对象

Javascript jQuery字符串变量作为id选择器返回空对象,javascript,jquery,Javascript,Jquery,有些东西我在这里看不到。。我有一个元素id为的字符串变量: var sf_new_id = "#sf_widget_choice-32:14.86:1:1" 我从另一个元素获得该字符串,如下所示(“sf_selectedmethod”是另一个元素): 然后,我删除了最后一个字符,并向该id添加了一些信息,即最后一个数字和“#”: 它将成为上面描述的字符串 我尝试用jQuery访问元素,如下所示: $(sf_new_id).addClass("..."); 具有该id的元素存在,但什么也没有发

有些东西我在这里看不到。。我有一个元素id为的字符串变量:

var sf_new_id = "#sf_widget_choice-32:14.86:1:1"
我从另一个元素获得该字符串,如下所示(“sf_selectedmethod”是另一个元素):

然后,我删除了最后一个字符,并向该id添加了一些信息,即最后一个数字和“#”:

它将成为上面描述的字符串

我尝试用jQuery访问元素,如下所示:

$(sf_new_id).addClass("...");
具有该id的元素存在,但什么也没有发生。我还试图隐藏该元素:

$(sf_new_id).hide();
但还是什么都没发生

我将整个元素放入console.debug,它显示了一个空对象:

console.debug($(sf_new_id));
输出:控制台中的对象[]

我错过了什么

编辑:
我尝试了escape方法,它似乎很有效,但现在的问题是,当信息在变量中时,如何转义冒号等?

您需要在选择器中转义
。试试这个:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";

从技术上讲,您可以在id/name属性中使用冒号和句点,但我建议避免使用这两种

在一些JavaScript库(如jQuery)中,句号和冒号都有特殊的含义,如果不小心使用它们,就会遇到问题。句点是类选择器,冒号是伪选择器(例如,当鼠标悬停在元素上时,“:hover”)

尽量避免ID属性中的“.”和“:”,如果不可能的话。请尝试在javascript中转义它们,如下所示:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";
ID应匹配:

[A-Za-z][-A-Za-z0-9_:.]*
  • 必须以A-Z或A-Z字符开头
  • 可以包含-(连字符)、(下划线)、:(冒号)和。(期间)
  • 但我们应该避免:和。原因:


    例如,ID可以标记为“a.b:c”,并在样式表中引用为#a.b:c,但作为元素的ID,它可以表示ID“a”、类“b”、伪选择器“c”。最好避免混淆,避免使用。和:总共。

    必须对字符串中的特殊字符进行转义,才能形成有效的选择器

    var sf_new_id = "#sf_widget_choice-32:14.86:1:1";
    
    sf_new_id = sf_new_id.replace(/:/g, "\\:")
                         .replace(/\./g, "\\.")
    
    $(sf_new_id).hide();
    

    加载页面后是否执行代码?$(文档)。就绪(函数(){…您的代码…})您需要对字符串变量中的“:”和“.”等字符进行转义。我怀疑用#作为第一个字符声明的javascript变量@@shreya
    #
    是选择器引用ID的指示器。稍微编辑了一下问题。添加更多信息!基本上,我从另一个元素获取字符串,那么冒号和句点是否仍然影响jquery?是的!!这个很好用!谢谢你,伙计!也谢谢其他人。因为最初的问题不够清楚,所以我给了你们大家一个学分。很抱歉。
    [A-Za-z][-A-Za-z0-9_:.]*
    
    var sf_new_id = "#sf_widget_choice-32:14.86:1:1";
    
    sf_new_id = sf_new_id.replace(/:/g, "\\:")
                         .replace(/\./g, "\\.")
    
    $(sf_new_id).hide();