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

时间:2015-06-03 06:03:19

标签: javascript jquery

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

var sf_new_id = "#sf_widget_choice-32:14.86:1:1"

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

var anotherid = sf_selectedmethod.attr('id');

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

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

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

我尝试使用jQuery访问该元素:

$(sf_new_id).addClass("...");

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

$(sf_new_id).hide();

但仍然没有任何反应。

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

console.debug($(sf_new_id));

输出:控制台中的对象[]

我在这里缺少什么?

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

4 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分: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();

答案 2 :(得分:5)

您需要在选择器中转义printf("%.2lf",(double)a/b); :。试试这个:

.

答案 3 :(得分:3)

ID应匹配:

[A-Za-z][-A-Za-z0-9_:.]*
  1. 必须以A-Z或a-z字符开头
  2. 可能包含 - (连字符),_(下划线),:(冒号)和。 (周期)
  3. 但是应该避免:和。东阳:

    例如,ID可以标记为" a.b:c"在样式表中引用为#ab:c,但作为元素的id,它可能意味着id" a",class" b",伪选择器&# 34; C&#34 ;.最好避免混淆,远离使用。和:一起。