Javascript:can';t将href添加到列表项

Javascript:can';t将href添加到列表项,javascript,html-lists,href,Javascript,Html Lists,Href,我正在尝试向列表项添加新项。但是下面的代码没有向我想要的列表项添加超链接。有人能告诉我怎么了吗 HTML: li没有href属性,您必须在li中包装一个a标记 var a = document.createElement("a"); var ulist = document.getElementById("list1"); var newItem = document.createElement("li"); a.textContent = "...ooo"; a.setAttribute('

我正在尝试向列表项添加新项。但是下面的代码没有向我想要的列表项添加超链接。有人能告诉我怎么了吗

HTML:


li
没有
href
属性,您必须在
li
中包装一个
a
标记

var a = document.createElement("a");
var ulist = document.getElementById("list1");
var newItem = document.createElement("li");

a.textContent = "...ooo";
a.setAttribute('href', "http://www.msn.com");
newItem.appendChild(a);
ulist.appendChild(newItem);

属性在
  • 元素上没有意义。如果要将列表元素制作成链接,则需要将其内容包装在
    元素中,并对其应用
    href


    是的,所以基本上你错过了
    锚定
    标记的创建。

    虽然解决了,但我添加了一些信息供你阅读:)

    内容和属性 每个元素都有一个:

    ``[…]元素预期内容的描述。HTML元素的内容必须与元素的内容模型中描述的要求相匹配。[…]”

    因此,
    元素有一个内容模型。看看我们发现它是:

    • 零个或多个和元素
    由此我们可以得出结论,我们不能在
    ul
    元素中有锚定
    a
    。但是,如何将
    href
    属性添加到
    ul

    然后,我们看一看

    可在元素上指定的属性的规范列表 (除非另有禁止),以及非规范性 这些属性的描述。(内容位于破折号左侧 是规范性的,破折号右侧的内容不是。)

    对于
    ul
    我们发现:

    全局属性如下所示:

    • 存取键
    • 阶级
    • 内容可编辑
    • 迪尔
    • 拖拉的
    • 下降区
    • 隐藏的
    • 身份证
    • 拼写检查
    • 风格
    • tabindex
    • 头衔
    • 翻译
    此外,它还可以具有各种事件处理程序属性,如
    onmouseover
    onclick
    on…
    和。但是,正如我们看到的,没有
    href
    属性

    总之,我们现在知道:

  • ul
    不能将锚点作为子锚点
  • ul
    不能具有
    href
    属性

  • 但是,问题是关于
    href
    li
    元素! 由于
    li
    ul
    /
    ol
    相互交织,我们首先来看看
    ul
    。对于
    li
    我们遵循相同的程序:即:

    现在,这开启了广泛的可能性。在这里,我们可以在列表的顶部找到
    a

    那么属性呢?对于
    li
    我们发现:

    • 全局属性
      如果元素是ol元素的子元素:值-列表项的序号值
    换句话说,我们现在知道:

  • ul
    可以作为孩子拥有锚定
  • ul
    可以具有
    href
    属性
  • li
    可以作为孩子使用锚
  • li
    可以具有
    href
    属性

  • 解决方案 正如其他人所指出的,是将其添加到我们作为
    li
    元素的子元素放置的锚中:

    <ul>
        <li><a href="myurl">Hello</a></li>
    </ul>
    

    另一种方法是简单地使用link()方法。例如:

    //create new li element
    let newListItem = document.createElement("li");
    let ulist = document.getElementById("list1");
    newListItem.innerHTML = "...ooo".link("http://www.msn.com");
    ulist.appendChild(newListItem);
    

    一个人不应该把
    li
    包裹在锚内,而应该反过来。对!我的意思是包装列表元素的内容,而不是整个内容。我也这么想,但还不清楚。好办法;)
    <ul>
        <li><a href="myurl">Hello</a></li>
    </ul>
    
    //create new li element
    let newListItem = document.createElement("li");
    let ulist = document.getElementById("list1");
    newListItem.innerHTML = "...ooo".link("http://www.msn.com");
    ulist.appendChild(newListItem);