如何选择第二个<;李>;元素使用javascript?
使用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
<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";