Javascript函数document.createElement(标记名[,选项])不';我不能如愿工作

Javascript函数document.createElement(标记名[,选项])不';我不能如愿工作,javascript,Javascript,我需要在一个js代码行中创建元素 这不起作用: var gg=document.createElement(“a”,{href:http://someurl.com“}) 这将导致: 这个ElementCreationOptions对象是某种外来对象吗?我尝试了很多关于这个对象的组合,但是没有任何效果,结果总是奇怪的是属性!我也在规范中找到了它:但不知道它实际上是如何工作的 附言: 这也不起作用: var gg=document.createElement(“a”).setAttribute(“

我需要在一个js代码行中创建
元素

这不起作用:

var gg=document.createElement(“a”,{href:http://someurl.com“})

这将导致:

这个ElementCreationOptions对象是某种外来对象吗?我尝试了很多关于这个对象的组合,但是没有任何效果,结果总是奇怪的
属性!我也在规范中找到了它:但不知道它实际上是如何工作的

附言: 这也不起作用:

var gg=document.createElement(“a”).setAttribute(“href”,“someurl.com”)

结果是未定义。

请这样尝试

var gg = document.createElement("div")
 document.body.appendChild(gg);
var att = document.createAttribute( "href" );
att.value = "someurl.com" ;
gg.setAttributeNode(att); 

我相信createelement函数的第二个参数只适用于自定义元素。相反,您可以使用jQuery的.attr创建/设置如下属性:

var gg = $(document.createElement("div")).attr("href", "someurl.com");

如果您不使用jquery,那么您可能会运气不佳(至少如果您试图在一行中实现所有功能的话)。我会说使用.setAttribute(),但是我注意到您无法将其链接到对象构造函数的末尾,并且还没有找到解决方法。

您不能使用第二个(ElementCreationOptions)参数来添加html属性

var element = document.createElement(tagName[, options]);
文档中明确提到,第二个可选参数是包含单个属性的对象,即is。正如我们在下面看到的

可选的ElementCreationOptions对象包含一个名为is的属性,其值是以前使用customElements.define()定义的自定义元素的标记名。为了向后兼容以前版本的自定义元素规范,某些浏览器将允许您在此处传递字符串,而不是对象,其中字符串的值是自定义元素的标记名。有关如何使用此参数的更多信息,请参见扩展本机HTML元素

对于你的问题,解决方案如下:

var body = document.body || document.getElementsByTagName('body')[0];
var anchor = document.createElement('a');
anchor.href = 'http://someurl.com';

var text = document.createTextNode("http://someurl.com");  
anchor.appendChild(text);
body.appendChild(anchor);

让我知道它是否有效。

我知道这是一个古老的问题(相对而言),@Luke Weaver的回答已经给出了一条涉及jQuery的路线,但下面的选项都实现了@Garegin最初的要求,在使用vanilla JS时,仍然从createElement方法模棱两可的参数名中为他提供他想要的功能

gg = Object.assign(document.createElement('a'),{href:'http://someurl.com',innerText:"Bonus points?"});
此解决方案在一行上创建
'
。它更长,因此以下操作可能会更好:

function oneLineTag(tag,options){
  return Object.assign(document.createElement(tag),options);
}
let quickAnchor = {
  href:'http://someurl.com',
  innerText: "I'm still answering a 3-year-old question"
}
现在你可以选择

gg = oneLineTag('a',quickAnchor);

options
不是属性的对象。为什么需要在一个命令中执行它?只需使用
var gg=document.createElement(“div”);setAttribute(“href”,“someurl.com”)。如果你需要它作为一个表达式,把它放在一个helper函数中并调用它。你需要更仔细地阅读文档。“如果此对象已定义且具有“is”属性,则已创建元素的“is”属性将使用此属性的值初始化。”它没有说明options对象在任何地方初始化任意元素属性。请注意,您记录了。createElement(“div”)不是“a”-在两行上执行此操作,它将执行您想要的操作。(
setAttribute
不会将元素返回到
gg
)是的,这可能会起作用。我也可以让它在两行代码中工作,但正如我在问题中标记的那样,我需要在一行中完成。OP希望它在一行中
class
的键在第二个参数中似乎不起作用,我不确定为什么。您需要在第二个参数中使用键“className”。它是一个字符串,用空格分隔。稍后,您可以通过与该字符串或classList属性交互,将其作为一个元素进行交互,classList属性提供类似数组的构造和一些有用的方法。MDN处的类名称:MDN处的类列表: