J'essaie d'obtenir tous les conteneurs dans une sélection et d'ajouter-les dans un tableau. Jusqu'à présent, j'ai pu obtenir uniquement le premier conteneur à l'aide du code suivant: donc si j'avais: p> et J'ai sélectionné cette partie du texte:
"Voici un peu plus de contenu de contenu"
Une fois que j'utilise le conteneur retourné par GetSelectednode () et faire une certaine transformation sur celle-ci uniquement "Voici encore plus de contenu" est affectée correctement et non "Metteur". Il y a donc un moyen de faire obtenir tous les contenants et non seulement le premier? P> Remarque: J'étais également déjà examinée ce lien:
Comment puis-je obtenir l'élément DOM qui contient la sélection actuelle?
Et quelqu'un a même commenté:
"Cette solution ne fonctionne pas pour tous les cas. Si vous essayez de sélectionner plusieurs balises, toutes les balises suivantes, à l'exception du premier seront ignorées." P> P>
3 Réponses :
Utiliser Dans votre cas, tous les "conteneurs" possibles sont des frères et sœurs Pas d'enfants, et nous sélectionnons à l'aide d'une souris ou d'un clavier. Dans ce cas, il suffit de considérer deux possibilités: vous avez sélectionné un nœud unique ou vous avez sélectionné les nœuds de frère de frère. P> Toutefois, si votre HTML était plus compliqué et que vous avez considéré la possibilité de scripts Création de plusieurs sélections, nous aurions besoin d'une solution différente. Vous devriez passer par chaque noeud dans le DOM, en recherchant ceux qui faisaient partie de quelque chose de sélection. P> p> plongez-vous.monancestorContainer code> et
selection.containsnode code>:
Nice mais comment puis-je obtenir les enfants d'intérêt et ne pas tenir compte des autres?
Presque, disons que j'avais
Contenu 1 span> Contenu 2 span> Contenu 3 p> P> P> Et maintenant, ce que je fais est de sélectionner le contenu 1 uniquement, le code que celui que vous avez fourni ci-dessus va déterminer les deux contenus 1 et 3 lorsque nous voulons seulement legarder 1
Ok, je vois ce que tu veux dire. J'ai changé ma réponse une fois de plus.
Maybee Je suis blondie et vieille école, mais si je dois remplir un tableau, j'utilise A pour la prochaine boucle et quelque chose appelé appuyez sur une poussée pour remplir le tableau. Cela pourrait ne pas être cool mais fonctionne habituellement. Je ne peux voir aucune boucle ni pousser. Donc, il n'y aura qu'un seul élément.`
other code ... if (selection.rangeCount > 0) for (var i;i<selection.rangeCount;i++){ var x= selection.getRangeAt(i).startContainer.parentNode ; //make a var containers.push(x);//push var to array } return containers ; }`
Cela signifie qu'il n'y a qu'un seul conteneur, voir sur Selection.Rangecount.Je devinez quelque chose avec votre partie d'alimentation, c'est Buggy. Comme généralement, je suggère plutôt d'utiliser Youngsternernerdyi DoITallinOlineCinecauseiamyoungCoolandStupid Séparez les tâches en lignes simples. . Split un tel monstre! -> x = selection.getrangeat (i) .startcontainer.parentnode. Ou au moins le suivre dans le débogueur. Je ne sais pas ce qu'il devrait tenir à l'intérieur et s'il y a. Très souvent, de telles constructions tôt ou tard, un composant échoue. Difficile de suivre.
Il semble que vous ne manquiez pas de détruisez le texte sélectionné, il semble allégé de passer par les portions en surbrillance et de voir s'ils font partie de la sélection, voici un exemple:
p> <p>
<b>Here's <span class="highlighted">Highlight <b>some</b></span> some more content</b>.
<span class="highlighted">Highlight some</span>
and press the button. Press the <span class="highlighted">Highlight some</span> other button to remove all highlights
</p>
Qu'est-ce que vous essayez de faire exactement ? Voulez-vous remplacer la sélection?
@Titus met en évidence et leghighlight, l cette partie est deegirlight
Pouvez-vous me donner un petit exemple s'il vous plaît? Je ne sais pas comment l'utiliser. @Tituts