2017-08-30 65 views
-4

p标签排序的话,我需要我的<p></p>标签内排序的话,所以当我这样做:从HTML收集

var paragraphs = document.getElementsByTagName("p"); 

我得到的HTML集合。

在这一点上,我不知道如何继续。如何从集合中获取单个段落并对它们进行排序?

感谢您的帮助。

+1

反对票是b/c,您需要显示您已尝试达到这一点,然后发布一个失败代码的小例子。 – flyer

+0

听起来像作业 –

+0

@ZachM。所以我有一个问题,我不能在这里问一个问题?难道你没有什么更有趣的事情比唠叨吗? – grabnem

回答

0

如果您将html嵌套在<p>标记中,这会变得更复杂,但您可以将文本拆分为字符串数组,然后sort the array

这里是显示这个整体提琴:https://jsfiddle.net/tuc2d5f1/9/

这里是基本的JS代码。它没有考虑节点内的html,也没有复杂的字符替换。

for (var i in paragraphs) { 
    if (!paragraphs.hasOwnProperty(i)) continue; 
    // skip this iteration if it's not an actual element 

    console.log("Starting paragraph: " + i); 
    var text = paragraphs[i].innerHTML.toString().toLowerCase(); 
    // get the text of the node 

    text = text.trim().replace(".", ""); 
    // you need to remove special chars. Regex would be best 

    var txtAry = text.split(" "); // split to an array based on spaces 
    // you should first replace all newline/return chars with spaces 

    txtAry.sort(); // this is an array of strings in alphabetical order 

    console.log(txtAry); 
} 
+0

我得到了那部分,我遇到了forEach循环的问题,获得了所有单个段落标记innerHTML – grabnem

+0

@grabnem @grabnem用一个工作小提琴看到我的更新答案。 – luxdvie

1

getElementsByTagName返回包含HTML集合的类似数组的对象。您需要循环浏览这些项目并从中提取html

var paragraphs = document.getElementsByTagName("p"); 
var html; 
for (var i=0; i<paragraphs.length; i++) { 
    /* cache plain string */ 
    html = paragraphs[i].innerHTML 
    /* convert into an array, sort it as an array, convert back to string */ 
    html = html.split('').sort().join(''); 
    console.log(html); 
} 
+0

我试过了,它似乎没有工作,它根本没有进入循环,没有日志,感谢您的答案,虽然 – grabnem

+0

请按照此示例:[解决方案](http:// jsbin。 com/tosucohaqe/edit?html,js,console,output) - 那是你在找什么? – Melcma

+0

它很接近,下面的答案更多的是我在找的东西,但是谢谢你的回答! – grabnem