【问题标题】:Shortcut to get dom elements with several selectors and one class?获取具有多个选择器和一个类的 dom 元素的快捷方式?
【发布时间】:2019-04-18 07:47:11
【问题描述】:

我想知道这样的东西是否存在,不带过滤器(我正在寻找捷径),带有 jQuery 的集合或 native querySelectorAll :

$('(select|input[type="text"]|textarea).myCssClass')

我想要所有带有myCssClass css 类的 select(s)、input-text(s) 和 textarea(s)。

我也试过不成功:

$('(select, input[type="text"], textarea).myCssClass')

请注意,我已经知道以下内容:


$('form#myForm')
  .find('select, input[type="text"], textarea')
  .filter('.myCssClass')
  .each(....)

想要的捷径 - 我会错过阅读 jQuery 文档的东西。

【问题讨论】:

  • 不,因为这是.filter 的用途,所以不需要一个。
  • 感谢您的回答,@freedomn-m
  • 我相信,如果有的话,它会记录在 jquery 选择器页面上:api.jquery.com/category/selectors - 它非常全面。可能有一个插件或辅助函数可以使快捷方式 become 可用(与 : 选择器可扩展的方式相同),但不是直接内置到 jquery 中。
  • .filter(function(){return $(this).hasClass('myCssClass')) 是一种非常复杂的写法.filter('.myCssClass')
  • 你说得对,@04FS。事实上,它在我的代码中是一个更复杂的函数,我只保留了它的“substantifique moelle”。我纠正了。

标签: javascript jquery css dom


【解决方案1】:

没有这样的内置方法,但是您可以轻松编写一个辅助函数,您可以向该函数传递一个与另一个选择器连接的选择器数组:

const combineSelectors = (applyToAll, arr) => arr
  .map(str => str + applyToAll)
  .join(',');
$(combineSelectors('.myCssClass', ['select', 'input[type="text"]', 'textarea']))
  .each(function() {
    $(this).css('background-color', 'blue');
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="myCssClass"></textarea><br>
<input><br>
<input type="text"><br>
<input type="text" class="myCssClass">

【讨论】:

    【解决方案2】:

    您可以在 javascript 中创建一个自定义函数,该函数将接受一个元素数组和类。然后迭代该数组并使用document.querySelectorAll 从具有匹配类的dom 中获取所有元素。 document.querySelectorAll 将提供一个集合。您可以再次对其进行迭代以定位每个元素并向其添加类

    let className = 'myCssClass';
    let elm = ['input', 'textarea'];
    
    function addClaz(arr, className) {
      arr.forEach(function(elem) {
        document.querySelectorAll(`${elem}[class='${className}'`).forEach(function(em) {
          em.classList.add('test')
        })
      })
    }
    addClaz(elm, className)
    .test {
      background: green;
    }
    <textarea class="myCssClass"></textarea><br>
    <input><br>
    <input type="text"><br>
    <input type="text" class="myCssClass">

    【讨论】:

    • 感谢您的帮助,但我正在寻找一个 shortcut,我会错过阅读 jQuery 文档的内容。我可以用 .filter 构建这样的功能。谢谢。
    • @PhilippePerret 不确定 shortcut 的确切含义
    • 我也没有。对不起,我的英语不好。我的意思是“用更短的方式来写长的东西”。 « $('.myClass') » 是« a set of each DomElement with myClass css class.
    • @PhilippePerret:没有比 2 个答案中使用的更短的方法了。你为什么不接受第一个答案?它肯定能解决你的问题!
    • @Meziane,这是因为我的方式 - 在我的问题结束时 - 更加射手和清晰。 :-((新手)我应该回答我自己的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多