【问题标题】:Correct way to add variable and selectors to a not function - jquery将变量和选择器添加到非函数的正确方法 - jquery
【发布时间】:2015-05-05 09:37:51
【问题描述】:

我已经检查了一些关于 SO 的答案,我认为我的语法是正确的,但有些东西不能正常工作。

我正在尝试创建一个混合了变量的 jquery 选择器数组,并将它们存储在 not() 函数中。

我有这个fiddle 来演示。

第二行函数不起作用:

var trigger = $('mainNav li:eq(0) a');
var headerLinks = $('#header a').not('.control a', + trigger);

我的第一个想法是 #header a 在 css 方面比 .control a 具有更高的优先级。但是更改类和 ID 似乎不起作用。

同样,我的代码中还有一个更简单的 var:

var content = $('.content');
var added = $('.extraList', + content);

在控制台中added 只返回extraList 选择器。

1 not 函数的工作方式与其他 jquery 选择器不同吗?我希望看到在控制台中选择和/或过滤的所有元素的数组

2 有没有办法将变量和选择器存储在标准数组中并调用它?我不知道这看起来和 jquery 需要解释的完全一样,但是像这样:

var arr = ['.control a', headerLinks, content, '.post'];

我意识到这是混合类型,但如果可能的话,我不确定如何将 jquery 变量和选择器传递到同一个数组中。

【问题讨论】:

    标签: javascript jquery arrays variables jquery-selectors


    【解决方案1】:

    对于代码var headerLinks = $('#header a').not('.control a', + trigger);

    你可以简单地使用链式

    var headerLinks = $('#header a').not('.control a').not(trigger);
    

    var trigger = $('.control a, #mainNav li:eq(0) a'); //I am using here #mainNav
    var headerLinks = $('#header a').not(trigger);
    

    对于var added = $('.extraList', + content);

    您可以使用.add()

    创建一个新的 jQuery 对象,并将元素添加到匹配的元素集中。

    var added = $('.extraList').add(content);
    

    【讨论】:

    • 谢谢@Satpal 我确实尝试链接​​ not 函数,但这似乎不起作用。查看更新的小提琴:jsfiddle.net/lharby/js5okk49/4
    • @lharby,.control 不是header 的子级,所以$('#header a').not('.control a') 仍将引用$('#header a')。你想达到什么目的?
    • 我正在尝试填充不应触发某个功能的链接列表。未指定的其他链接应触发该功能。
    • 好的,添加功能可以正常工作。不幸的是,当它们应该被排除时,控制链接仍在记录“被点击”到控制台。 Ah OK, not():从匹配元素集中删除元素。所以它将第一个选择器作为父级运行。谢谢。
    • @lharby,请参阅 jsfiddle.net/mbe547o7 这将解决您的问题,主要更改是 var headerLinks = $('#header a').not(trigger);var contentLinks = $('.post a').not('.control a');
    【解决方案2】:

    感谢@Satpal。您的回答肯定对我有所帮助,但这就是我所做的。

    存储一个 jquery 选择器数组以便以后从函数中排除,我可以继续添加或编辑这个变量。 (我认为这更简洁,因为它已经将代码分开了一点,并且绕过了父/子问题):

    var exclude = $('#mainNav li:eq(0) a, .control a, .social-links a');
    

    创建另一组链接以包含在函数中:

    var headerLinks = $('#header a');
    var contentLinks = $('.post a');
    

    合并将用于触发功能的选择器并添加排除的选择器:

    var merge = $.merge(headerLinks, contentLinks).not(exclude);
    

    现在点击功能:

    merge.on('click',function(){});
    

    应该触发我想要的链接,而不是我不想要的链接。

    我仍然想知道如何将 jquery 选择器和变量数组存储在标准 javascript 数组中。

    更新小提琴:http://jsfiddle.net/lharby/gk7bmzqh/1/

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2023-04-01
      • 1970-01-01
      • 2020-08-14
      • 2014-03-24
      • 2015-03-09
      • 2014-03-15
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多