【问题标题】:CSS selector for "tabindex > 0" elements“tabindex > 0”元素的 CSS 选择器
【发布时间】:2017-01-19 17:37:39
【问题描述】:

我正在尝试选择所有 tabindex 大于 -1 的元素(可聚焦元素)。到目前为止,这是我想出的:

$element.find('[tabindex]:not([tabindex < \'0\'])');

它不起作用,而是抛出一个错误:

Error: Syntax error, unrecognized expression: [tabindex < '0']
    at Function.Sizzle.error (vendor.js:1463)
...

然而,这可行,但它不包括 tabindex

$element.find('[tabindex]:not([tabindex=\'-1\'])');

【问题讨论】:

    标签: jquery angularjs jquery-selectors


    【解决方案1】:

    Selectors doesn't provide attribute selectors with numeric comparisons,jQuery 也没有。

    在这种特定情况下,我想您可以只排除带有以- 符号开头的 tabindex 的元素(除了排除 tabindex 为 0 的元素):

    $element.find('[tabindex]:not([tabindex="0"]):not([tabindex^="-"])');
    

    【讨论】:

    • 最好是“不开始”,或者:not([tabindex^="-"])
    【解决方案2】:

    您可以为此使用filter

    $("[tabindex]").filter(function() {
        return parseInt($(this).attr("tabindex"), 10) >= 0;
    })
    

    【讨论】:

    • 是的,但在我的情况下,我想要一个这样的选择器表达式,所以稍后我可以将它与其他表达式一起放在一个常量中,例如 ('[contentEditable=true]', 'a[href] '、'input:not([disabled])'等)
    • 问题指出:“我正在尝试选择 [sic] tabindex 大于 -1 的所有元素”。关于组合表达式或将其用作变量的问题没有。很高兴你得到了你需要的东西,但请在以后的问题中包括你的所有要求。
    【解决方案3】:

    一个使用 ES6(没有 jQuery)的现代解决方案,它可能会关注:

    Array.from(document.querySelectorAll('[tabindex]')).filter((el) => {
        return el.tabIndex >= 0;
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多