2016-07-15 13 views
0

ich eine Reihe mit diesem bekommen, um zu bestellen, in div mit contenteditable Modus:Wie eine Reihe von Bereichen von Position

var sel = document.getSelection(); 
var range = sel.getRangeAt(0).cloneRange(); 
//... 
comments.push(range); 

Der Text in div hat nur HTML-Tags <br> und <mark> (hervorgehoben Kommentare). Da range.startOffset und range.endOffset den Container betreffen (und nicht das div mit contenteditable-Modus), weiß ich nicht, wie man Bereiche entsprechend ihrer Position im Text anordnet (von oben nach unten).

Hilf mir bitte.

+0

könnten Sie einige Beispiele hinzufügen? –

+0

Können sich die Bereiche überschneiden? – Oriol

+0

@Oriol: Nein, aber Kommentar im Kommentar ist möglich. – Sven

Antwort

0

Wenn Sie Ihre Bereiche von Startpositionen sortieren, können Sie

comments.sort(r1, r2) { 
    var comp = r1.startContainer.compareDocumentPosition(r2.startContainer); 
    if(comp & Node.DOCUMENT_POSITION_FOLLOWING) return -1; 
    if(comp & Node.DOCUMENT_POSITION_PRECEDING) return +1; 
    return r1.startOffset - r2.startOffset; 
} 
+0

Danke. Es ist perfekt ! Benutze einfach "sort" auf diese Weise: 'comments.sort (function (r1, r2) {...});' – Sven

Verwandte Themen