javascript - 如何使用 find() 函数通过数据属性查找元素?

标签 javascript jquery jquery-selectors

我通过 jquery data() 函数向元素添加数据属性。

我想使用find()函数来获取元素。但显然,这是行不通的。

我想做的是缓存元素的父元素并做很多事情。

像这样:

var $parent = $('#parent');
var $dataElement = $parent.findByData('whatever');
$parent.xxx().xxx().xxx()....;

我不想要这个:

var $parent = $('#parent');
var $dataElement = $("#parent [data-whatever='whatever']");
$parent.xxx().xxx().xxx()....;
//It looks like find the parent twice.

任何函数都可以做到这一点吗?

最佳答案

我通过 jquery data() 函数向元素添加数据属性。

正如您所提到的,您正在使用 jQuery 的 data() 方法将 data 设置为元素。它不会在 DOM 中添加任何属性。所以你无法通过 .find() 找到它,因为它在内存中*。

相反,您应该使用 .attr() 方法来设置数据属性,然后您可以使用 .find() 方法从 DOM 中读取它。

* 没有合适的词

下面是使用 .data() 设置数据并尝试查找它的示例。

<小时/>

$('#parent').find('.two').data('test', 'myTest');

var div = $('#parent').find('.child[data-test="myTest"]').length;

alert(div);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='parent'>
  <div class='child one'></div>
  <div class='child two'></div>
</div>

<小时/>

下面是使用 .attr() 设置数据并尝试查找它的示例。

<小时/>

$('#parent').find('.two').attr('data-test', 'myTest');

var div = $('#parent').find('.child[data-test="myTest"]').length;

alert(div);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='parent'>
  <div class='child one'></div>
  <div class='child two'></div>
</div>

<小时/>

下面是根据您的评论的示例:

<小时/>

$('#parent').find('.two').data('test', 'myTest');

var div = $('#parent').find('.child').filter(function(){
    return $(this).data('test') == 'myTest'
}).text();

console.log(div);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='parent'>
  <div class='child one'>One</div>
  <div class='child two'>Two</div>
</div>

关于javascript - 如何使用 find() 函数通过数据属性查找元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297282/

相关文章:

javascript - 使用require js加载锤子

jquery - 父级中的多个 CSS 背景颜色

javascript - 模式关闭后停止 jQuery 函数

jQuery - live() 无法与 append div 中的 next() 一起使用

jquery - 对于 jQuery,href 中的 # 是多么必要

javascript - 查询选择器在 zombie.js 中返回什么?

javascript - 在 startPage 方法上从 Objective C 获取 HTML5 本地存储项

javascript - 启用/禁用动态 Bootstrap 工具提示

javascript - 如何在加载、后退和前进时运行函数

javascript - .not() 不工作