我被告知通过getElementbyid或jQuery(“#tagname”)获取元素被视为“黑客”。
这个论点是没有编译的,因此可能需要很长时间来追查愚蠢的错字。
或者更好的论点:当某个元素id发生变化时,重构所有内容需要很长时间。
对这个“黑客”论点有什么争论? 围绕它有一个很好的解决方案吗?
答案 0 :(得分:3)
嗯。首先,我会说getElementById
是一个标准的DOM函数。另外,我认为getElementById
比getElementsByClassName
快得多,然后循环找到你想要的那个。也许他们指的是硬编码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')
更改为其他内容,它就可以正常运行。