Javascript 干属性选择

Javascript 干属性选择,javascript,jquery,Javascript,Jquery,假设我在页面上有一个元素: <div data-name='foo'> 获取属性值的最佳方法是什么?还有什么比$('[data name]').attr('data-name')或$('[data-name]').data('name')更枯燥的吗?我不知道这与“不要重复你自己”有什么关系,但是如果你没有对这个节点的缓存引用,你就必须使用它,而不是详细地调用它 最好至少为节点设置一个id。与该属性选择器相比,该属性的DOM查询速度更快。但毕竟,在变量中存储引用仍然是最快的技术,

假设我在页面上有一个元素:

<div data-name='foo'>


获取属性值的最佳方法是什么?还有什么比
$('[data name]').attr('data-name')
$('[data-name]').data('name')
更枯燥的吗?

我不知道这与“不要重复你自己”有什么关系,但是如果你没有对这个节点的缓存引用,你就必须使用它,而不是详细地调用它

最好至少为节点设置一个
id
。与该属性选择器相比,该属性的DOM查询速度更快。但毕竟,在变量中存储引用仍然是最快的技术,比如

var myNode = $('[data-name]');
然后在整个应用程序中使用该变量

myNode.data( 'name' );

我不知道你如何定义“干燥”…
如果(x<0)x=1不是因为写了两次x而“干”的话

无论如何对于当前的DOM结构,没有。选择器效率低下,这更重要

您可以给元素一个id,这会使代码更快

<div id='foo' data-name='foo'> </div>
如果没有标记限定符(例如,
div[data name]
),选择器将非常低效,因为它必须遍历整个DOM以检查匹配的元素


最好是识别一个特定的ID(甚至是一个类)来帮助选择引擎,并限制必须搜索多少DOM。

只要你不到处重复(即缓存结果),我真的看不出你怎么能得到更干燥的东西

var name = $('[data-name]').data('name');

从技术上讲,你还没有重复你自己。

你可以有一个这样的插件。不过,我不确定额外的开销是否值得

function getData(varName) {

  var selector = '[data-' + varName + ']';
  return $(selector).data(varName);

}

(未测试)

$(“div['data-name'])。数据(“name”)
请定义“干燥”。如果(x<0)x=1
不是“干”的,因为你写了两次
x
。@gdoron我将干定义为不重复你自己,在这种情况下,相同的字符串重复。在您的示例中,是的,从技术上讲它不是“干的”,但在这个示例中,语法/语言可能有理由不尝试使其干。同样,在某些语言中,你确实可以用$或$0之类的东西来代替“x”,因此这也是语言偏好的问题。我认为干式引用是因为你必须重复属性的名称。e、 g.
$('[data zebra]')。数据('zebra')
。将名称更改为“horse”,您必须更改两次。如果(x<0)x=0,这与DRY的关系与
if(x<0)x=0将是。?!编写一个插件,将
数据-
附加到选择器中?现实点@格多伦:是的,我同意——我认为不值得花这么多钱。然而,问题是“我如何使其干燥?”这是我唯一能想到的方法。你可以教他如何编写好代码,而不是教他如何编写坏代码(我同意他的要求)我没有要求错误的代码,我只是问是否可能。我当然可以想象,这个库为这类事情提供了一个内置函数,或者有人在现有函数的基础上有一些巧妙的方法来实现它。jQuery中有大量的语法糖分,可以使用其他jQuery方法用一行或两行插件替换(例如,appendo可以很容易地被append替换)。@mahemoff在问题中加入一些上下文可能是个好主意。考虑到你的评分,我想你知道自己在做什么,并做出了相应的回答。但是,了解你想做什么以及为什么这样做会使帮助更容易。
function getData(varName) {

  var selector = '[data-' + varName + ']';
  return $(selector).data(varName);

}