如何通过id“改进”获取DOM元素?

时间:2012-04-11 19:47:26

标签: jquery html dom

我被告知通过getElementbyid或jQuery(“#tagname”)获取元素被视为“黑客”。

这个论点是没有编译的,因此可能需要很长时间来追查愚蠢的错字。

或者更好的论点:当某个元素id发生变化时,重构所有内容需要很长时间。

对这个“黑客”论点有什么争论? 围绕它有一个很好的解决方案吗?

3 个答案:

答案 0 :(得分:3)

嗯。首先,我会说getElementById是一个标准的DOM函数。另外,我认为getElementByIdgetElementsByClassName快得多,然后循环找到你想要的那个。也许他们指的是硬编码id,就好像你的脚本有很多地方说$("#element-id"),那么你可以用一个名为eid的变量替换“element-id”,并动态设置它。

当然,我必须说这不是黑客,我不确定是谁。考虑一个简单的例子:

<form id='my-form-name'>
  <input id='input-text' ... />
  ...
</form>

我会说document.forms[0]比说$('#my-form-name')更糟糕。并且能够说$('#my-form-name #input-text')document.forms[0].children[0]或其他任何东西更好。

最后,您可以随时执行:

var $someElement = $('#el-id'); 

这样你只能在一个地方硬编码id,并且“重构”代码涉及更改一个字符串......

答案 1 :(得分:1)

除非你个人遇到过问题,否则我不担心。

每个人都使用ID来识别元素。在查找代码和执行代码时,它都很快。如果你担心拼写错误/重构,你总是可以将你的元素存储在一个对象中并在整个脚本中使用它:

var tagname = $("#tagname");

但实际上,我不担心。如果您重命名它们,您可以随时使用自动搜索并替换它。

答案 2 :(得分:1)

  

我被告知通过getElementbyid [sic]或jQuery(“#tagname”)获取元素被视为“hack”。

谁告诉你这是错的。 getElementById不是“hack”,它是内置的JavaScript函数。这是你如何通过ID获取元素。在内部,jQuery将在执行jQuery("#tagname")时使用它。本机DOM函数比jQuery的内置CSS引擎(sizzle)更快 ,并且通过其ID获取元素是获取元素的最快方式。

  

这个论点是没有编译的,因此可能需要很长时间来追查愚蠢的错字。

我根本不理解这个论点。编译与否,如果你在一个地方改变某些东西,你将不得不在其他地方改变它。考虑一下这个PHP代码:

<?php
$name = "Joe";

echo $name;

如果我决定将$name更改为$customerName该怎么办?现在,我将不得不在我的代码中追查一个“愚蠢的错字”。

  

或者更好的论点:当某个元素id发生变化时,重构所有内容需要很长时间。

事实上,这是一个更好的论据。您可以执行一次DOM查找,然后在其他地方使用该变量。例如:

var $content = $('#content');

$content.attr('rel', 'test'); // Use $content to edit the element

因此,如果ID发生变化,您只需将$('#content')更改为其他内容,它就可以正常运行。