如何选择第二个<;李>;元素使用javascript?

如何选择第二个<;李>;元素使用javascript?,javascript,html,Javascript,Html,使用JavaScript,如何动态更改以下列表项之一: <ul class="tabbernav"> <li class="tabberactive"><a title="All">All</a></li> <li class=""><a title="One">One</a></li> <li class=""><a title="Two">Two</a&g

使用JavaScript,如何动态更改以下列表项之一:

<ul class="tabbernav">
<li class="tabberactive"><a title="All">All</a></li>
<li class=""><a title="One">One</a></li>
<li class=""><a title="Two">Two</a></li>
<li class=""><a title="Three">Three</a></li>
</ul>
  • 所有
  • 一个
  • 两个
  • 三个

  • 所有
  • 一个
  • ------------新列表项已更改---------
  • 三个

研究如何使用JQuery等Javascript库。那会让你的生活轻松很多。然后你可以这样做:

$('li a[title=Two]').text('Changed Text Goes Here');

您需要检查我的语法(不确定
text()
函数),但在JQuery的api文档中查找很容易。

如何确定要修改的
  • 如果你是按索引做的,你可以这样做,我想:

    var list = document.getElementById("listid");
    list.childNodes[2].innerHtml = "<a title='Two'>-----------NEW LIST ITEM CHANGED---------</a>";
    
    var list=document.getElementById(“listid”);
    list.childNodes[2]。innerHtml=“------------新列表项已更改----------------”;
    
    我想您可以在ul中使用getElementsByTagName来获取数组中的所有列表项。然后您可以编辑数组中的第三个元素,索引号为2

    var lItems = document.getElementsByTagName("ul").getElementsByTagName("li");
    lItems[2].innerHTML = "<a title='Two'>----NEW LIST ITEM CHANGED-----</a>";
    

    希望这能对您有所帮助:)

    我还建议使用jQuery,它可以做出这样的选择。在您的情况下,可以使用:eq psuedo选择器获取第二行元素:

    $('.tabbernav li:eq(1)')
    
    这将选择DOM元素,它是类为tabbernav的元素中的第二个li(索引从0开始)。它返回一个jQuery对象,您可以将其他方法链接到该对象。更改内部HTML是通过.HTML(“此处的HTML”)完成的。

    var list=document.getElementsByTagName(“li”);
    列表[2]。innerHTML=“----新列表项已更改----”;
    

    这将非常有效

    我知道这个问题很老了,但由于它仍然存在,请看我如何修改第一个答案。我觉得其他人可能需要它

    >var lItems = document.getElementsByTagName("ul")[0];
    >>var nth = lItems.getElementsByTagName("li")[2];
    >>>nth.innerHTML = "<a title='Two'>----NEW LIST ITEM CHANGED-----> </a>";
    
    var lItems=document.getElementsByTagName(“ul”)[0]; >>var nth=lItems.getElementsByTagName(“li”)[2]; >>>n.innerHTML=“----新列表项已更改------>”; 这基本上解决了这个问题,特别是通过指定要抓取的文字的位置,在本例中[0]。如果缺少该位置,代码将无法正常工作,因为getElementsByTagName(名称)返回具有指定名称的html元素集合。因此,如果不指定其中的哪一个,代码将失败

    如果您喜欢代码重用,请查看一个可用于此目的的函数。您只需要指定父元素及其位置和子节点位置,就可以得到相同的结果

    >var nthChild = function(parent, pos, childPos){
    >>parent = document.getElementsByTagName(parent)[pos];
    >>>return parent.children[childPos];
    >>>>};
    //used thus:
    >nthChild("ul", 0, 2).innerHTML = "<a title='Two'>----NEW LIST ITEM CHANGED-----> </a>
    
    >var nthChild=函数(父函数、子函数、子函数){
    >>父项=document.getElementsByTagName(父项)[pos];
    >>>返回parent.children[childPos];
    >>>>};
    //因此使用:
    >nthChild(“ul”,0,2).innerHTML=“----新列表项已更改------>
    


    这是在纯JavaScript中选择Ul列表中第三个Li元素的方式

    document.querySelectorAll("li")[2].innerHTML = "vasile";
    

    将“Vasile”替换为所需的文本。

    如果没有JQuery,我怎么做?我不确定这里是否有childNodes,但我知道浏览器不能保证某些DOM数组的顺序。例如,在IE7渲染模式下使用IE8(我相信)会打乱一些您可能期望的数组顺序。无论哪种方式,DOM数组中节点的位置都不能保证与HTML中定义的顺序相同。@Marc W-别开玩笑了!感谢您的提示:)。iirc childNodes将不会在x浏览器中安全,因为在!IE浏览器文本节点也包括在内。请参阅我在Kevin的帖子中对DOM数组排序的评论。我不确定跨浏览器使用是否安全。是的,我只是在发布后看到的。我想你可以在数组中循环寻找title=“2”的子节点来避免这个问题。我认为getelements实际上是x安全的,但我不是100%使用chrome。如果不是,那么最好调用xpath选择!IE.@Jesper-从firstChild开始和循环nextSibling N次更容易此答案中的代码很好,但可能不兼容跨浏览器。不过,请参见Jesper在我之后关于在数组中循环查找title=“Two”的子节点的评论。这更像是你应该做的。注意语言,你实际上是在问第三个问题,也就是来自审查队列的index=2的项目:我可以请你在你的答案周围添加更多的上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。
    >var lItems = document.getElementsByTagName("ul")[0];
    >>var nth = lItems.getElementsByTagName("li")[2];
    >>>nth.innerHTML = "<a title='Two'>----NEW LIST ITEM CHANGED-----> </a>";
    
    >var nthChild = function(parent, pos, childPos){
    >>parent = document.getElementsByTagName(parent)[pos];
    >>>return parent.children[childPos];
    >>>>};
    //used thus:
    >nthChild("ul", 0, 2).innerHTML = "<a title='Two'>----NEW LIST ITEM CHANGED-----> </a>
    
    document.querySelectorAll("li")[2].innerHTML = "vasile";