jQuery字符串变量作为id-selector返回空对象

Got*_*ies 9 javascript jquery

有一些我在这里没有看到的东西..我有一个字符串变量与元素id:

var sf_new_id = "#sf_widget_choice-32:14.86:1:1"
Run Code Online (Sandbox Code Playgroud)

我从另一个元素中获取该字符串('sf_selectedmethod'是另一个元素):

var anotherid = sf_selectedmethod.attr('id');
Run Code Online (Sandbox Code Playgroud)

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

var sf_new_id = anotherid.substr(0, anotherid.length-1); // Now without the last char.
sf_new_id = '#'+sf_new_id+'1';
Run Code Online (Sandbox Code Playgroud)

它变成了上面描述的字符串.

我正试图用这样的jQuery访问该元素:

$(sf_new_id).addClass("...");
Run Code Online (Sandbox Code Playgroud)

具有该id的元素存在,但没有任何反应.我也尝试隐藏元素:

$(sf_new_id).hide();
Run Code Online (Sandbox Code Playgroud)

但仍然没有任何反应.

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

console.debug($(sf_new_id));
Run Code Online (Sandbox Code Playgroud)

输出:控制台中的Object []

我在这里错过了什么?

编辑: 我尝试了escape-thingy,它似乎工作,但现在的问题是,当信息在变量中时,我怎么能逃避冒号?

小智 9

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

在像jQuery这样的几个JavaScript库中,句点和冒号都有特殊意义,如果你不小心使用它们,你会遇到问题.句点是类选择器,冒号是伪选择器(例如,当鼠标悬停在元素上时,元素的":hover").

尽量避免"." 和您的ID属性中的":"或者如果不可能.请尝试在javascript中转义它们,如下所示:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";
Run Code Online (Sandbox Code Playgroud)


Sha*_*k D 7

您必须转义字符串中的特殊字符,以形成有效的选择器.

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();
Run Code Online (Sandbox Code Playgroud)


Ale*_*lan 5

你需要逃避:.你的选择.试试这个:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";
Run Code Online (Sandbox Code Playgroud)