2012-12-25 14 views
6

Bir wysiwyg editörünü ayarlıyorum ve h2 seçili metnini çıkaracak bir simge oluşturmaya çalışıyorum. Bir önceki versiyonda Javascript: execCommand ("removeformat") h2 etiketini çevirmiyor

aşağıdaki komutu mükemmel çalıştı:

oRTE.document.execCommand("removeformat", false, ""); 

Ama şimdiki sürümünde, bu komut başarıyla altı çizili, kalın, italik olarak seçilen metin böyle etiketlerden kaldırır rağmen, h2 etiketi bırakır bozulmamış.

(İlginçtir ki, execCommand("formatblock"...) başarıyla h2 etiketi oluşturur.)

ben execCommand terk edip başka bir yol bulmak zorunda gidiyorum olduğunu düşünüyorum, ama ben de bir olacağını düşünüyorum Sadece 1 satır koddan çok daha fazlası! Öneriler için minnettar olurdum.

cevap

3

Bu, önerilen W3C Editing APIs ile uyumludur. Biçimlendirme öğelerinin bir listesi vardır ve H# öğeleri listelenmez. Bunlar sadece biçimlendirme değil yapısal olarak kabul edilir. Bu etiketleri kaldırmak için UL veya P'u kaldırmaktan daha mantıklı değildir.

Sen div için biçimini değiştirebilirsiniz
+0

benim soru daha açık yapılmış olması gerekirdi sanırım: ben şimdi ne yapacağım? – oyvey

+0

Belirli öğeleri kaldırmanız gerekiyorsa, bunları aramak ve kaldırmak için açık DOM işleme işlevlerini kullanın. jQuery, kod satırlarının sayısını azaltmaya yardımcı olabilir. – Barmar

+1

Bundan daha ayrıntılı cevaplar almak için buraya gönderildim. Ve h2 etiketini sadece şu anda vurgulanan metinden kaldırmam gerektiğini aklımda tutarak. – oyvey

4

, en iyi çözüm değil ama çalışır ve kısadır: seçili metne en yakın üst almak için bu diğer çözüm de vardır

document.execCommand('formatBlock', false, 'div') 

o zaman ambalajından edebilirsiniz

var container = null; 
if (document.selection) //for IE 
    container = document.selection.createRange().parentElement(); 
else { 
    var select = window.getSelection(); 
    if (select.rangeCount > 0) 
     container = select.getRangeAt(0).startContainer.parentNode; 
} 
$(container).contents().unwrap(); //for jQuery1.4+ 
1

sana Menzil nesneyi kullanabilirsiniz düşünüyorum: Bu bazı etiket > b < gibi olabilir unutmayın. Web Developers 3rd Edition için Profesyonel JavaScript'ten bulabilirsiniz. o kitaptan bölüm 12 (12.4) ve bölüm 14 (14.5) ...

bir örnek:

var selection = frames["richedit"].getSelection(); 

var selectedText = selection.toString(); 

var range = selection.getRangeAt(0); 

var span = frames["richedit"].document.createElement("span"); 
span.style.backgroundColor = "yellow"; 
range.surroundContents(span); 
İlgili konular