Whit DOM manipulation and without knowing the classes
HTML Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>Untitled</title>
<style type="text/css">
div {width:140px;padding:10px;border:1px solid red;}
.sub {width:120px;}
p {margin:0;padding:0;border:1px solid yellow;}
</style>
</head>
<body id="bdy">
<div id="allCls">
<p class="dog-1">dog-1</p>
<p class="rabbit-3">rabbit-3</p>
<p class="dog-2">dog-2</p>
<p class="cat-1">cat-1</p>
<p class="dog-3">dog-3</p>
<p class="rabbit-1">rabbit-1</p>
<p class="rabbit-2">rabbit-2</p>
</div>
<script type="text/javascript">
var i,elm=document.getElementsByTagName('p');
var tab=[],clt={}
for (i=0;i<elm.length;i++) {
tab[tab.length]=elm[i].className;
clt[elm[i].className]=elm[i];
}
tab.sort();
var cntCls=document.createElement('div');
cntCls.id="srtCls";
var oldCls=newCls='',subCnt,newPrg;
for (i=0;i<tab.length;i++){
newCls=tab[i].replace(/\-\d+/,'');
if (newCls!=oldCls) {
if (oldCls!='') {cntCls.appendChild(subCnt);}
subCnt=document.createElement('div');
subCnt.id=newCls;
subCnt.className="sub";}
newPrg=clt[tab[i]].cloneNode(true);
subCnt.appendChild(newPrg);
oldCls=newCls;
}
cntCls.appendChild(subCnt);
document.getElementById('bdy').appendChild(cntCls);
</script>
</body>
</html>
Edit : Add an alert(document.getElementById('srtCls').innerHTML) at the last line
Bookmarks