2016-01-20 49 views
0

我有一個函數返回給我一個單詞列表(與前一個和下一個qord)。我能夠使用正則表達式正確地在文本中找到單詞,並知道前一個單詞和下一個單詞(所以我只找到一個單詞,而不是全部相同)。我實際使用替代的Javascript功能來包裝它SPAN裏面:span spanish vanilla Javascript

var re = RegExp("(?:^\\W*|(" + 
    motBefore.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + ")\\W+)" + 
    motErreur.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "(?:\\W+(" + 
    motAfter.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + ")|\\W*$)", "g"); 
document.getElementById('edth_corps').innerHTML = 
    document.getElementById('edth_corps').innerText 
     .replace(re, motBefore + " " + '<span id="' + nbId + 
     '" class="erreurOrthographe" ' + 
     'oncontextmenu="rightClickMustWork(event, this);return false"> ' 
     + motErreur + '</span>' + " " + motAfter); 

但事實是,因爲我放在羣這三個詞,我以前給他背單詞和後。

我用這個技術得到的問題是,我放鬆了所有的標點符號,更重要的是,如果有一個字體標籤(或粗體,斜體,下劃線)我鬆開它們。

我想繞過這個詞跨度,就像它是當前節點的孩子,這個單詞是不觸及前一個和下一個單詞(他們被認爲是在這裏,所以我們有正確的詞,而不是這個詞的另一個發生)。

但我不知道該怎麼做,因爲我只能使用舊的Javascript(IE編譯器設置爲IE5的兼容模式,並且這個功能是我無法爲這個版本重寫的唯一一個)。我不能使用這樣的Jquery庫(我已經看到這個插件有很多解決方案)。

難道有人指着我正確的方向嗎?即使錯誤詞在他身邊沒有父母,但只是一個句子的一部分,insertBefore可以工作嗎?

+0

我無法通過搜索來識別父標籤嗎?我使用regEx然後在沒有改變位置的情況下將這個詞包裹起來?與insertBeofre或另一種插入? – Slayner

+0

@JackA。但是wrod-wrap函數似乎只在那裏,所以如果它太長,你可以打破一個詞,沒有圍繞一個跨度包圍它 – Slayner

+0

@ JackA.when我使用我的函數時我可以找到我需要用span來包裝的單詞(motErreur),但我必須給他前後兩個字。我想要的只是包裝motErreur跨度,並給他作爲一個孩子節點而不會改變的位置,就像這樣,如果他在句子的中間,他不會移動,如果他已經像一個包裹已經大膽的標籤,span標籤將成爲這個大膽標籤的孩子 – Slayner

回答

1

這不是一個完整的答案,但希望它會有用。您可以使用IE中的TextRange對象修改元素中的文本。這與the W3C Range object類似,但它由舊版本的IE支持。使用此對象,您可以選擇文本,查找文本並修改文本。

找到所需的文本將是棘手的部分,但一旦找到並在範圍內選擇它,就很容易修改HTML。

舉一個簡單的例子,我創建a Fiddle是發現在一個div一個字符串和一個跨度,圍繞它:

var findString = "JavaScript"; 
var content = document.getElementById("content"); 
var textRange = document.body.createTextRange(); 
textRange.moveToElementText(content); 
if (textRange.findText(findString)) { 
    var html = "<span class='selected'>" + findString + "</span>"; 
    textRange.pasteHTML(html); 
} 

希望這有助於。

+0

感謝您的回答,我將嘗試使用RegEx我有我可以找到全球範圍,然後可能使用您的答案只修改正確的單詞而不是他周圍的單詞。我會讓你知道這對我有效。 – Slayner

+0

好吧,它對你的貢獻很大,我很難將他與我得到的正則表達式整合起來,但會繼續爲你提供給我的東西。 – Slayner

+0

我只需要計算如何用我的RegEx和IE5檢索父節點,這將是完美的我認爲 – Slayner