Alle DOM-Blockelemente für ausgewählte Texte abrufen

7

Bei der Auswahl von Texten in HTML-Dokumenten kann man von einem DOM-Element zu einem anderen Element gehen und dabei möglicherweise mehrere andere Elemente passieren. Mit der DOM-API ist es möglich, den Bereich der Auswahl, die ausgewählten Texte und sogar das Elternelement aller ausgewählten DOM-Elemente zu erhalten (mit commonAncestorContainer oder parentElement () basierend auf dem verwendeten Browser). Es ist mir jedoch nicht bewusst, dass alle Elemente, die Elemente der ausgewählten Texte enthalten, aufgelistet werden können, außer dass das einzige übergeordnete Element abgerufen wird, das alle Elemente enthält. Das Verwenden der Eltern und Durchlaufen der Kinderknoten wird es nicht tun, da es möglicherweise andere Geschwister gibt, die nicht innerhalb dieser Eltern ausgewählt werden.

Also, gibt es einen Weg, dass ich alle diese Elemente, die die ausgewählten Texte enthält, bekommen kann. Ich bin hauptsächlich daran interessiert, die Blockelemente zu erhalten (p, h1, h2, h3, ... etc), aber ich glaube, wenn es einen Weg gibt, alle Elemente zu bekommen, dann kann ich sie durchgehen und sie filtern, um das zu bekommen, was ich wollen. Ich begrüße alle Ideen und Vorschläge.

Danke.

    
cria 18.11.2010, 22:54
quelle

3 Antworten

16

Der Schlüssel ist window.getSelection().getRangeAt(0) Ссылка

Hier ist ein Beispielcode, mit dem Sie spielen können, um das zu tun, was Sie wollen. Erwähnen Sie, was Sie wirklich in Frage wünschen, wird Menschen helfen, bessere Antworten zu geben.

%Vor%

Dies ist nicht der effizienteste Weg, Sie könnten das DOM selbst durchlaufen, indem Sie den startContainer / endContainer des Bereichs zusammen mit nextSibling / previousSibling und childNodes verwenden.

    
Juan Mendes 18.11.2010, 23:49
quelle
10

Sie können dazu meine Rangy-Bibliothek verwenden. Es bietet eine Implementierung von DOM Range and Selection-Objekten für alle Browser, einschließlich IE, und verfügt über zusätzliche Range-Methoden. Eine davon ist getNodes() :

%Vor%     
Tim Down 18.11.2010 23:48
quelle
0

Es klingt, als könnten Sie Traversing von der jQuery API verwenden.

Möglicherweise .contents ()

Hoffe das hilft!

    
jasonflaherty 18.11.2010 23:01
quelle

Tags und Links