Jquery: Vérifier contre la première instance

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.

 

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(); }); 

http://jsfiddle.net/j9qwzyzq/

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