4

我经常遇到奇怪的事情,我不理解 jQuery 和 DOM ID 和选择器。通常我只是在他们周围工作,但我真的想一劳永逸地解决这个问题。考虑以下标记:

<div id="accordionWrapper"><p><a class="expandall" href="#">Test</a></p></div>

我有一个 jQuery 点击功能<a>

//works fine
jQuery('a.expandall').click(function() {...whatever...});

但以下没有:

//fails
jQuery('#accordionWrapper p a.expandall').click(function() {...whatever...});

...我不明白。这是我对 CSS 或 jQuery 或...的不理解吗?

4

3 回答 3

5

其实,你的理解并没有错。这是一个 JsBin(JsFiddle 似乎已关闭),它显示了您的确切标记和您的确切 jQuery 代码,所有这些都可以正常工作。

http://jsbin.com/inuqez/4/edit

因此,如果您在使用第二个 jQuery 选择器时遇到问题,那肯定是其他问题。如果您向我们提供更多详细信息,我们可能会提供帮助。否则,只需仔细查看您的代码并确保没有任何明显的错误,例如具有相同 ID 的多个元素(如 @Frederic 所述)。

于 2012-06-29T06:05:56.720 回答
0

第一种方式:

jQuery('a.expandall').click(function() {...whatever...});

...定义对 DOM 中任何位置存在的具有“expandall”类的任何锚元素的单击。

第二种方式:

jQuery('#accordionWrapper p a.expandall').click(function() {...whatever...});

...为任何具有类“expandall”的锚元素定义单击,该锚元素是段落元素的后代,该元素是具有 的元素的后代id="accordionWrapper"。请注意,“#accordionWrapper”的元素类型并不重要,因为您没有指定它。

我说具有该 id 的“元素”而不是具有该 id 的“元素”,因为如果您的 html 有效,则只有一个具有任何给定 id 的元素。如果您为多个元素重复了一个 id,您会发现(对于大多数浏览器)按 id 选择只会返回其中一个元素(最常见的是第一个)。

假设您的问题是由于重复使用 id 而导致的,您可以通过为多个类似元素提供相同的而不是相同的id来解决它。

于 2012-06-29T06:25:46.750 回答
0

尝试 :

jQuery('div#accordianWrapper p a.expandall').click(...)
于 2012-06-29T06:02:19.177 回答