jQuery Selector返回函数而不是DOM

时间:2016-11-01 14:58:45

标签: jquery html dom

这是一个奇怪的...

页面加载后,以下内容正在进行。 我试图将一个类添加到已知的(我知道元素的id)DOM元素。

$('#day-08-07-2016').addClass('active')

然而,这会返回一个jQuery函数,而不是DOM元素。 enter image description here

由于选择器是Id,页面上只有一个元素,我不能使用[0]或first()函数。

最终,以下情况不起作用!

Xcode 8

该元素明显存在于页面上。 enter image description here 我做错了什么?

5 个答案:

答案 0 :(得分:2)

您找不到该元素,因为$('#day-08-07-2016')查找的ID为day-08-07-2016

因为您的ID已经以#为前缀,如果您打算以此方式保留,您可能需要这样做:

$('[id="#day-08-07-2016"]').addClass('active');

编辑:正如DaniP在评论中建议的那样,你也可以通过以下方式逃避#

$('#\\#day-08-07-2016')

答案 1 :(得分:2)

正如其他答案中已经提到的 - jQuery选择器总是返回一个jQuery对象(你称之为" function")。

如果你想通过id以#开头的id来选择一些元素 - 你应该转义那个char(使用\\#)。

以下是一个例子:



$(function() {
  console.log($('#\\#abc').text());
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="#abc">content</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你问题的标题并不真正相关。 jQuery选择器总是返回各种延迟函数。通常称为jQuery set wrapper。在这种情况下,它正在包装一个空集。

我认为你真正的困惑是由你放入id的#引起的。从ID中获取#,你会没事的。或者,请参阅有关逃避它的其他答案。

答案 3 :(得分:0)

如果你想知道你的真正错误,请转到任何浏览器的控制台,

添加带有前缀&#39;#&#39;

的任意元素的ID

然后使用以下js选择元素,

$("#test")

结果就像对象:

init {context:document,selector:&#34; #test&#34;}

如果您尝试以下内容:

$("##test")

您将面临以下错误:

jquery.min.js:4未捕获错误:语法错误,无法识别的表达式:## test(...)

然后从您的ID中删除#前缀,然后尝试

$("#test")

结果将如下所示,

<强> [A#测试

始终避免使用前缀&#39;#&#39;对于元素的id并避免使用前缀&#39;。&#39;对于元素的类......

答案 4 :(得分:0)

在css选择器中,符号#表示id,而.表示类。

$('.my-item')将返回jquery包含的元素,该元素看起来像<a class='myitem' href='#'>

$('#my-item')将返回jquery包含的元素,该元素看起来像<a id='myitem' href='#'>

在您的情况下,看起来您的id值以#开头。为了使您的选择器工作,您有两个选择:

1)转义css选择器中的#字符。在这种情况下,您的查询将变为$('#\\#day-08-07-2016').addClass('active')

2)更改你的id,使它们不以#字符开头,你的查询可以保持不变。

就个人而言,我会在这里选择2。