打印所有李的孩子的文本,而不是每个李获得子小孩

嗨,我试图打印所有李的元素文本没有得到他们的子孩子的文字,但我无法得到正确的结果:

我的HTML:

<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>child demo</title> <style> body { font-size: 14px; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <ul class="topnav" id="abc"> <li>Item 1</li> <li>Item 2 <ul> <li class="topnav1">Nested item 1</li> <li class="topnav1">Nested item 2</li> <li class="topnav1">Nested item 3</li> </ul> </li> <li>Item 3</li> </ul> <script> var li = $("#abc > li"); var arr = []; for(var i=0;i<li.length;i++){ arr.push($(li[i]).clone().children().remove().end().text()); } console.log(arr); </script> </body> </html> 

脚本运行后,我得到了奇怪的事情:

输出如下所示:

 0:"Item 1" 1:"Item 2↵ ↵ " 2:"Item 3" 

谁能解释一下这些箭的含义,我怎样才能得到所有李的文字? 我想我的数组是:

 0:"Item 1" 1:"Item 2" 2:"Item 3" 

我哪里错了?

文本覆盖了整个节点,也可能是在阅读子里的换行符。

你可以使用trim()来删除

 var li = $("#abc > li"); var arr = []; for(var i=0;i<li.length;i++){ arr.push($(li[i]).clone().children().remove().end().text().trim()); } console.log(arr); 

我不知道这是否更快,但肯定更清洁

 var arr = []; $('.topnav > li').filter(function() { var temp = $(this)[0].firstChild.data; arr.push(temp); });