2016-05-03 10 views
0

Angenommen, ich habe eine Funktion, die den Startindex (4) des Wortes ‚Welt‘ in dieser HTML-String zurückgibt:anpassen Index für HTML-String für HTML-Tags zu kompensieren

<div>The world is round</div> 

Diese Funktion (außerhalb meiner Kontrolle) funktioniert mit jQuery .text() Methode. Allerdings muss ich die .html() Methode von jQuery für das, was ich mache, verwenden.

Die Verwendung des vorhandenen Index gibt mir den Buchstaben "n" aus der Spanne, wenn Sie die Methode .html() von jQuery verwenden. Ich muss diesen Index ändern, um zusätzliche HTML-Tags und verschachtelte HTML-Tags zu berücksichtigen, die in der div.

<div><p><span class="highlight">The</span></p> world is round</div> 

Also, dieses Code-Snippet würde einen neuen Index von 42 für den ersten Buchstaben von 'Welt' zurückgeben. Wie würde ich das machen? Danke vielmals!

UPDATE: Das Code-Snippet würde den Index INCLUDING die Tags zurückgeben. Ich möchte die Tags nicht entfernen. Vielen Dank!

+0

Wenn Sie

worldThe

world is round
haben, was sollte die Funktion zurückgeben? –

+0

Mögliches Duplikat von [HTML aus JavaScript abfragen] (http://stackoverflow.com/questions/822452/strip-html-from-text-javascript) – spaceman

+0

Die Funktion sollte den Index INCLUDING html tags zurückgeben. Also, ohne Tags, ist der Index 4. Wenn Sie Tags hinzufügen, ist es 42. – John1984

Antwort

0

Ich kam mit einer Lösung, aber es hat eine Einschränkung ... wenn der Benutzer '<' oder '>' eingeben würde, würde es fehlschlagen.

 // Loop variables 
     var within_html_tag = false; 
     var tag_incrementer = 0; 
     var text_incrementer = 0; 
     var current_object_html = current_object.html();   

     // Adjust starting index to take account of HTML tags 
     for (var i = 0; i < current_object_html.length; i++) 
     { 
      // Handle characters representing start or end of HTML tags 
      if (current_object_html[i] == "<") { within_html_tag = true; } 
      if (current_object_html[i] == ">") { within_html_tag = false; tag_incrementer++ } 

      // Increment counters (depending on type) 
      if (within_html_tag) { tag_incrementer++; } else { text_incrementer++; } 

      // Once the desired index is reached, append tag incrementer and exit 
      if (text_incrementer == start_index) 
      { 
       // Adjust the starting index 
       start_index = text_incrementer + tag_incrementer; 

       // Handle end of sentences 
       if (current_object_html.substr((text_incrementer + tag_incrementer) - 2, 2) == "</") { start_index += 7; } 

       // Escape procedure 
       break; 
      } 
     } 
0
var result = sourceString.replace(/(<([^>]+)>)/ig,"").indexOf("word"); 

Ist das, was Sie brauchen? In der vorherigen Version wurde nur das n-te Wort extrahiert, aber bei näherer Betrachtung schien es, dass Sie den Index eines bestimmten Worts benötigten, mit Ausnahme von Tags, nicht wahr?

+0

Sorry, ich brauche den Index INCLUDING Tags. Vielen Dank! – John1984

+0

Also, im Grunde müssen Sie die Ausgabe einer Funktion, die den Index 4 zurückgibt, in den Index des gleichen Wortes im Kontext, der HTML-Tags enthält, konvertieren? – overburn

+0

Ja. Also, für mein Beispiel ist der Index (ohne Tags) 4. Wenn Sie Tags hinzufügen, ist es 42. 42 ist die Nummer, die ich brauche. Vielen Dank! – John1984