有一些我在这里没有看到的东西..我有一个字符串变量与元素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)
您必须转义字符串中的特殊字符,以形成有效的选择器.
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)
你需要逃避:与.你的选择.试试这个:
var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";
Run Code Online (Sandbox Code Playgroud)