See Fiddle重複テキストを作成するjavascriptの
にまたがる私は「スパン」のシリーズを与えられ、「ハイライト」のテキストの範囲にするために、これらの指標でHTMLにdivを追加する必要がありますしています。現在、強調したいテキストの周りにspanStarting spanEndingを追加しています。その後、私はspanStarting/spanEndingをで置き換えます。私はこのように長いスパンが、今私は、重複スパンに対処する必要があり、重複したことがないとして働いてきた
{
"begin": 145,
"end": 155
}
:
スパンは次のようになります。例えばは、重複スパンは次のようになります。
{
"begin": 4,
"end": 18
},{
"begin": 4,
"end": 41
}
はスパンが重複している場合spanStarting/spanEndingを追加すると、インデックスを歪め、それが不可能正しいテキストを強調するために見つけることができます。 これまでに私が何を持っているかを見ることができます。fiddle重複するスパンがあるため、私のコードはコードを配置するための正しいインデックスを見つけることができません。
マイコード:層状のハイライトを表示するための鍵の
String.prototype.replaceBetween = function(start, end, what) {
start = this.substring(0, start);
end = this.substring(end, this.length);
return start + what + end;
};
function createHighlights(subElements, snippet, raw) {
var currentHighlight = subElements;
currentHighlight.spanStart = currentHighlight.begin;
currentHighlight.spanStop = currentHighlight.end;
var currentWord = raw.substring(currentHighlight.spanStart, currentHighlight.spanStop);
currentHighlight.spanStart = snippet.text.indexOf(currentWord);
currentHighlight.spanStop = currentHighlight.spanStart + currentWord.length;
snippet.text = snippet.text.replaceBetween(currentHighlight.spanStart, currentHighlight.spanStop, 'spanStarting' + currentWord + 'spanEnding');
}
var element = {
"text": "The blood pressure was initially elevated on the patient's outpatient medications, so his hypertension medicines were adjusted by increasing his lisinopril to 20 mg qd."
},
rawText = element.text.slice(),
spans = [{
"begin": 145,
"end": 155
}, {
"begin": 4,
"end": 18
}, {
"begin": 4,
"end": 18
}, {
"begin": 90,
"end": 102
}, {
"begin": 4,
"end": 41
}];
spans.forEach(function(currentHighlight) {
if (element.text.indexOf('<span') === -1) {
createHighlights(currentHighlight, element, rawText)
};
})
element.text = element.text.replace(/spanStarting/g, '<span class="highlight">');
element.text = element.text.replace(/spanEnding/g, '</span>');
document.getElementById('text').innerHTML = element.text;
ありがとう:ここ
は実施例です。このソリューションの私の問題は、将来、各スパンのツールチップを追加する必要があるかもしれないし、スパンの重複を示すために異なる色付けをする必要があるかもしれないということです。 – Mcestone
異なる色の交差する2つのスパンがあるとどうなりますか?交差点はどのような色ですか?また、ツールチップとスパンを交差させてハイレベルと話している場合、どの交差点にカーソルを置いたときにどのツールチップが表示されるかを見極めるにはどうしますか? –
annotator.jsが重複するスパンを処理する方法は、http://annotatorjs.org/の理想的なソリューションです。基本的には、ハイライト(明るい黄色)のテキストの大きな文字列を持つことができます。このテキストには、ホバー上で表示できるツールチップがあります。大きな文字列内には強調表示されている単語が1つあります。これは暗い黄色で、独自のツールチップがあります。 1つの単語にカーソルを置くと、1つの単語のヒントと親のテキストのヒントが表示されます。 – Mcestone