Avoir quelques problèmes avec cela avec prendre une sortie étrange et le transformer en format de scénario lisible.
Donc, voici le code HTML.
John
I want to buy milk.
- Comment passer la valeur de span en HTML à une autre page
- jQuery iframe modal fermer sur le formulaire soumettre
- Bootstrap nested des icons géniales pour accordéon
- Autorisation refusée à l’aide de Javascript / jQuery sur un fichier local
- disableSelection sur tout sauf l’entrée
John
Milk is expensive.
John grabs the milk
John
I guess its fine.
Steve
Yeah.
Mes tentatives ont résolu cela ont échoué. mais l’idée de base est la suivante …
faire une boucle dans chaque instance de p.actor
stocker la première instance en tant que var
vérifier l’instance suivante contre var
si ce sont les mêmes
ajoute le contenu de la ligne p.line de cette instance à la ligne p.line de var
sinon remplacer var
avec un nouveau p.actor
De même, si vous rencontrez une instance suivante de p.actor, p.dirNote, elle définit une nouvelle variable.
essentiellement lorsque vous avez terminé le HTML devrait ressembler à ceci
John
I want to buy milk. Milk is expensive.
John grabs the milk
John
I guess its fine.
Steve
Yeah.
Des idées sur la faisabilité? Je vous remercie.
L’extrait suivant devrait faire l’affaire. Fondamentalement, il recouvre la collection dans un tableau et commence au dernier élément de l’ensemble.
$('p.actor').toArray().reverse().forEach(function (el) { var $this = $(el), $prev = $this.prev().prev('.actor'), $line ; if ($this.text() !== $prev.text()) { return; } $line = $this.next('.line'); $prev.next('.line').append(' ' + $line.text()); $this.add($line).remove(); });
J’ai une demi-réponse pour vous. Cela a évolué plus que je ne le pensais alors je vais m’arrêter pour l’instant
Il parcourt vos paragraphes, conserve leur type et reconstruit une nouvelle liste. Il doit encore comprendre comment garder trace de la ligne / de l’acteur précédent (ou suivant) et addRow
conséquence. J’espère que ça aide…
var rows = $("#my-list p"), newRows = [], currentActor = null, currentLine = null, addRow = function (type, value) { newRows.push({ type: type, value: value }) }; rows.each(function (index) { var $row = $(this), className = $row.attr("class"), isActor = className == "actor", isLine = className == "line", isDirNote = className == "dirNote", content = $row.text(); if (isLine) { //TODO: keep track of line to be appended to next item (if same actor) //TODO: if next element is same actor, append line //addRow(className, content); } if (isDirNote || isActor) { addRow(className, content); } console.log(content, isActor, isLine, isDirNote); }) console.log(newRows); //TODO: build new paragraph array from newRows