2016-09-27 3 views
0

So habe ich html folgende:Wrap Text in span-Tags, die Start- und Endpositionen des Textes zu wissen

<div class="container"> some beautiful text here </div> 

Was ich will, ist:

<div class="container"> some <span class="highlight">beautiful</span> text <span class="highlight">here</span> 

Ich weiß, wie es das Wissen zu tun Wort. Dank dieser Frage: How to highlight text using javascript Aber ich muss Text an bestimmten Positionen hervorheben. Ich habe Anfangs- und Endpositionen der Saite. Ich habe versucht, wie dies durch die Liste des Start- und Endpositionen Iterieren:

function highlight(divId, startPos, endPos) { 
    inputText = document.getElementById(divId); 
    var wholeText = inputText.innerText; 
    var inHTML = wholeText.substring(0, startPos) + "<span class='highlight'>" + wholeText.substring(startPos, endPos-1) + "</span> " + wholeText.substring(endPos, wholeText.length); 
    document.getElementById(divId).innerHTML = inHTML; 
} 


function highlightAll(fileA, fileB, JSONfile) { 
    var startPositionsA = extractStartPosA(JSONfile); 
    var endPositionsA = extractEndPosA(JSONfile); 
    var startPositionsB = extractStartPosB(JSONfile); 
    var endPositionsB = extractEndPosB(JSONfile); 

    for(var i=0; i < startPositionsA.length; i++) { 
    highlight("TextA", startPositionsA[i]-1, endPositionsA[i]); 
    } 

    for(var i=0; i < startPositionsB.length; i++) { 
    highlight("TextB", startPositionsB[i]-1, startPositionsB[i]); 
    } 
} 

Aber die innerHTML- neu geschrieben nach jeder Iteration, so dass am Ende habe ich nur ein einziges Wort bekommen hervorgehoben - die eine, die ist links nach der letzten Iteration.

Könnte mir bitte jemand helfen? Ich habe keine Ideen, wo ich weiter gehen kann. Vielen Dank!

+0

Nun, dann innerHTML nicht überschreiben, sondern hinzufügen ...? – CBroe

+0

@CBroe können Sie mir bitte einen Hinweis geben, wie kann ich es tun? – java

+0

Die Indizes ändern sich immer nach dem Hinzufügen eines Tags ... – java

Antwort

0

wenn yout bekommen die richtige Position in startposition und EndPosition Sie eine var enthält die Markierung erstellen:

var highlightStart = "<span class='highlight'>"; 
var highlightEnd = "</span>"; 

einfach Ihren Text an den Positionen in Teile geteilt und die Teile zusammen und die Hervorhebung Vars in der richtige Bestellung

+0

Ihre Idee half, das Problem zu lösen! Vielen Dank! – java

+0

froh, dass ich helfen konnte – NotMyFaultSir

0

Ist das was du willst?

function highlight(id, start, end) { 
var html = document.getElementById(id).innerHTML; 
document.getElementById(id).innerHTML= [html.slice(0, start), '<span class="highlight">', html.slice(start, end), '</span>', html.slice(end)].join(''); 

} 
+0

Nun, ich habe eine ähnliche Funktion, aber ich muss durchlaufen die Anordnung der Start- und Endpositionen, weil ich viele Wörter habe, die ich hervorheben muss, und jedes Mal, wenn ich diese Funktion innerhalb von für aufrufen -loop schreibt das innereHTML einfach neu. – java