DRY属性选择
DRY attribute selection
假设页面上有一个元素:
<div data-name='foo'>
获取属性值的最佳方法是什么?有比$('[data-name]').attr('data-name')
或$('[data-name]').data('name')
更干燥的东西吗?
我不知道你如何定义"DRY"if (x < 0) x = 1
不是"DRY",因为你写了两次x?
无论如何,对于当前的DOM结构,不存在选择器效率低下,哪个更重要!
您可以给元素一个id,这样可以使代码更快。
<div id='foo' data-name='foo'> </div>
$('#foo').data('name'); // That's more like it.
我不知道这与"Don't Repeat Yourself"有什么关系,但如果你没有对此节点的缓存引用,你就必须使用那个相当冗长的调用。
至少为节点提供一个id
可能是个好主意。与该属性选择器相比,它的DOM查询运行得很快。但毕竟,将引用存储在变量中仍然是最快的技术,比如
var myNode = $('[data-name]');
然后在整个应用程序中使用该变量
myNode.data( 'name' );
你可以有一个这样的插件。不过,我不确定额外的开销是否值得。
function getData(varName) {
var selector = '[data-' + varName + ']';
return $(selector).data(varName);
}
(未测试)
如果没有标记限定符(例如div[data-name]
),选择器的效率将非常低,因为它必须遍历整个DOM来检查匹配的元素。
最好识别一个特定的ID(甚至一个类)来帮助选择器引擎并限制DOM的搜索量。
只要你不到处重复(即缓存结果),我真的看不出你怎么能得到更多的DRY。
var name = $('[data-name]').data('name');
从技术上讲,你还没有重复自己。
相关文章:
- jQuery最近父级的数据属性选择器
- javascript对象操作:根据指定条件选择属性
- Javascript:从数组中的对象中选择属性
- 如何在 javascript 中为没有值的标签选择属性
- jQuery按名称选择属性只选择第一个匹配的元素
- 使用 Angular 从服务器端生成的下拉列表中获取选择属性值
- 如何在 Javascript 中从对象中选择属性
- 选择属性在更改选择元素后未更改
- jQuery - 选择属性名称(非值)以 .. 开头的所有元素
- j查询选择属性
- 选择“属性的一部分-JQuery”
- 检查是否下拉'的第一个选项已选择属性
- JQuery选择属性范围
- jquery-attr选择器不会选择属性的全部值
- 强制dijit.form.ComboBox的选择属性
- 选择属性设置为特定值的元素中的所有元素
- 使用& # 39;这个# 39;选择属性,然后与选定的HTML属性进行比较
- 按掩码选择属性
- 在Chrome上XPath选择属性失败
- amCharts选择属性值