4

如果有这样的元素:

var c = document.createElement('a');

然后,只需执行以下操作即可添加属性名称:

c.name = "a1";

setAttribute()如果只能使用点表示法,目的是什么?

4

4 回答 4

2

属性与属性不同。

属性通常在您的 HTML 中创建,并将成为element.attributes. 有的还会设置相应的属性。

当您更改属性时,有些属性会更新,但其他属性不会。例如, .value 属性不会更改输入元素的属性。或者自定义属性不会成为自定义属性。

大多数时候你可能想设置属性,但是如果你想改变属性,那么在某些情况下你必须使用setAttribute

于 2012-08-15T22:32:36.577 回答
2

谁说你两者都可以?

好吧,好吧,你可以。但说真的,“谁说的?”,因为它主要归结为这一点。

最初,有 Netscape Navigator 2,第一个支持 Javascript 的 Web 浏览器,实际上比 Netscape Enterprise Server 的服务器端使用早了几个月,第一个支持 Javascript(在测试版中称为“Livescript”)但很快重命名为“Javascript”,因为那是 1995 年,将“java”这个词放在任何东西中是一种可靠的方式,可以让科技记者获得大约 20,000 列英寸的内容,这些记者在剩下的时间里都在困惑咖啡批发商想知道在哪里新闻稿和促销 schwag 是)。

当时的对象模型非常小,以至于你可以在几天内将整个模型掌握在脑海中。对于大多数元素,您实际上无法对它们做很多事情。很多事情都非常繁琐(您可以在其中找到 a <select id="selId" name="selName">today的当前值document.getElementById('selId').value 以及其他一些方法,那么您将需要document.forms[0]["selName"].options[document.forms[0]["selName"].selectedIndex].value.

src然后 IE3 也出现了 Javascript,NN 3 通过让您更改图像的属性提高了赌注。浏览器大战已经正式开始。许多退伍军人仍然被他们所做的事情所困扰。

使浏览器的文档模型更好的真正明显的方法是让属性反映越来越多的东西——最好是可写的而不是只读的。下一个最好的事情是有一种比其他浏览器更简单且更容易记住的更改方式(然后他们可能会制作更多在您的浏览器的最新版本中运行而在您的竞争对手的浏览器中没有的网页)。

通过保持快速的发展速度,很明显网景将开发一个新的中间件平台,这将使微软和苹果的地位变得无关紧要,而对于雅虎或 alta-vista 是否有搜索和/或将主导网络的目录。(不要对技术做出长期预测)。

在 make-script-able-to-do-everything-to-everything 的大趋势下,很多属性在有属性的时候就用对应的属性来命名,这毕竟是一种非常明智的方式。

不过这有点不一致。一方面,与属性对应的大多数属性都以直接的方式将字符串值映射到字符串值。一两个没有,例如href锚元素上的属性,它为您提供了一个更丰富的对象,其属性反映了 URI 的一部分(主要是因为它在 make-script-able-to-do-everything-to 之前的早期就可用-一切)。这既有用(如果您想分解 URI)又令人讨厌,因为没有很好的方法来分辨哪个是哪个。

在这个高度,他们有一种叫做 DHTML 的东西,还有一种叫做 dHTML 的东西,这两种方法以完全不兼容的方式做几乎相同的事情。

还有一个事实是 javascript 在允许您向任何东西添加新属性方面很松散,而 HTML 允许您添加新属性(值得商榷,取决于您对哪个标准的严格程度,但这是浏览器大战和新的专有属性)似乎每 4 分钟由一个浏览器或另一个浏览器添加一次)。知道一个属性是否会对任何给定的浏览器产生任何实际影响是一件令人讨厌的事情。

与此同时,在一个遥远的国际标准联盟中,正在开发一种叫做 XML 的东西。它允许您以各种方式添加具有各种属性的各种元素。还添加了在脚本中处理此问题的方法。

我们需要一种比现有的更一致地改变元素属性的方法,而且很明显,所有未来版本的 HTML 都将是 XML 应用程序(不要对技术做出长期预测),因此它是有意义的至少在两者之间是相对一致的。

每个人也开始意识到,拥有比其他人更受欢迎的浏览器不会让任何人成为下一个比尔盖茨(甚至不是现在的比尔盖茨),因此对标准方法提供更多支持而不是更浮华的优势-stuff-the-other-guy-can't-do 变得更加明显。

W3C DOM变得越来越成熟,越来越受到支持。它为我们提供了一种更一致的属性设置方式。它更冗长,但您可以始终如一地知道它要做什么,并且在创建、复制、更改和删除文档的某些部分方面也更强大。

但是如果可能的话,旧网站必须继续运行,而且它确实仍然是许多属性的有用简写,只需设置相应的属性,因此人们不会停止使用它。尽管如此,所有浏览器都在一定程度上支持 DOM 方法,从而在它们之间提供更多的一致性。

然后一半的开发人员开始使用 JQuery。

于 2012-08-15T23:20:05.697 回答
1

这是为了制作一些自定义属性:

虽然一切都很好el.name='aaa';

如果你让它el.customsttr='a'不起作用。

-- (除非已经定义,如下所述)

http://jsfiddle.net/sXdHB/

应用:

例如,您有一个 img,其属性为“src”,那么您可能想要添加一个自定义属性“big_src”,然后通过一些脚本读取它以显示更大的属性;

于 2012-08-15T22:19:15.160 回答
1

我会getAttribute/setAttribute明确表示您正在使用 DOM 元素。减少歧义是一个优点!

然而,这就是quirksmode.org对属性的评价:

属性

乱七八糟的。尝试按以下顺序影响属性:

  1. 尝试获取或设置特定属性,例如 x.id 或 y.onclick。
  2. 如果没有特定属性,请使用 getAttribute() 或 setAttribute()。
  3. 如果这不起作用,请尝试下表中的任何其他方法或属性。不过,大多数都有可怕的浏览器不兼容模式。
  4. 避免属性[]。这比其他任何事情都糟糕。
于 2012-08-15T22:29:07.577 回答