使用 jquery 按特定模式选择元素

Posted

技术标签:

【中文标题】使用 jquery 按特定模式选择元素【英文标题】:Select an element by particular pattern with jquery 【发布时间】:2022-01-12 02:08:05 【问题描述】:

我有一堆包含data-testid 属性的元素。

把它们想象成这样:

<div data-testid="my-page">
  <div data-testid="my-page-content"></div>
  <div data-testid="my-page-footer">
    <button data-testid="my-page-action-button">Do something</button>
    <button data-testid="my-page-cancel-button">Cancel</button>
  </div>
</div>

对于我的一项测试,我需要通过它们的数据测试 id 模式找到按钮。

如您所见,它是my-page-**-button

我需要知道如何相应地调整我的选择器,以便抓取以my-page 开头并以button 结尾的元素。

到目前为止,我一直在做:

$("[data-testid^='my-page-']")

不幸的是,这将抓住my-page-content(或my-page-footer)。如何使用 my-page-**-button 之类的 data-testid 获取所有元素?

【问题讨论】:

似乎更好的命名方案会使这更容易。 ;) 如果你在选择器中也包含按钮标签就足够简单了 【参考方案1】:

要么包括按钮

button[data-testid^='my-page-']

或者在结尾加上

[data-testid^='my-page-'][data-testid$='button']

console.log($("button[data-testid^='my-page-']").length);

console.log($("[data-testid^='my-page-'][data-testid$='button']").length);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-testid="my-page">
  <div data-testid="my-page-content"></div>
  <div data-testid="my-page-footer">
    <button data-testid="my-page-action-button">Do something</button>
    <button data-testid="my-page-cancel-button">Cancel</button>
  </div>
</div>

【讨论】:

【参考方案2】:

使用 prefix AND Suffix 选择。

$("[data-testid^='my-page-'][data-testid$='-button']")

一般规则

执行与:不要在选择器之间保留空格 累积与:将, 放在选择器之间

您需要 Execulsive AND

【讨论】:

【参考方案3】:

我认为这可以满足您的需要:

$('[data-testid^=my-page-][data-testid $=button')

下面是一个工作演示,如果您需要其他内容,请告诉我。


演示

// Select using start and end selectors
$('[data-testid^=my-page-][data-testid $=button').each( function() 
  console.log($(this).attr("data-testid"));
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-testid="my-page">
  <div data-testid="my-page-content"></div>
  <div data-testid="my-page-footer">
    <button data-testid="my-page-action-button">Do something</button>
    <button data-testid="my-page-cancel-button">Cancel</button>
  </div>
</div>

【讨论】:

以上是关于使用 jquery 按特定模式选择元素的主要内容,如果未能解决你的问题,请参考以下文章

选择元素有两个使用 jQuery 的特定子元素

如何使用jQuery选择没有特定类名的元素?

css 如何使用JQuery选择没有特定子元素的元素

如何使用 jQuery 按名称选择元素?

使用jQuery选择具有特定数据属性的元素

jQuery 按属性值获取/选择元素