2010-11-16 88 views
1

我使用编辑iframe.I创建自定义所见即所得插入自定义HTML代码想自定义HTML标记<ino>添加到选定的文本像<info>一些内容在这里</info>。我已经使用这个代码使用JavaScript pasteHTML功能

Editor = document.getElementById('iframe_id').contentWindow.document; 
var tag='info' 
var range = Editor.selection.createRange(); 
if (range.pasteHTML) 
{ 
var content=Editor.selection.createRange().htmlText 
content1="<"+tag+">"+content+"</"+tag+">" 
    range.pasteHTML(content1); 
} 

此代码适用于IE。content1正在获取正确的文本。但在输出中,起始标记<info>没有获得。我已经使用document.createElement('info');创建了该元素。我如何解决此问题。提前感谢。

回答

3

没有HTML <info>元素。这可能是您的代码无法正常工作的原因。

如果你确实需要这样做(我看不出为什么会这么做),那么你可以利用IE允许你使用document.createElement()创建无效DOM元素的事实,并且执行下面的操作,一个标记元件,定位含有该标记元件之前的原始内容的TextRange一个<info>元件,然后删除该标记:

var range = Editor.selection.createRange(); 
var info = Editor.createElement("info"); 
info.innerHTML = range.htmlText; 
var id = "some_random_id"; 
range.pasteHTML('<span id="' + id + '"></span>'); 
var span = Editor.getElementById(id); 
span.parentNode.insertBefore(info, span); 
span.parentNode.removeChild(span); 
+0

你试过用'document.createElement('info');'来实现什么?它不是一个有效的HTML元素,所以当你使用'pasteHTML'时,IE不会创建它。有可能IE会允许你在DOM中创建并插入一个''元素,这看起来可能是矛盾的,但这对你来说是IE。它不能使用'pasteHTML'的原因仍然存在。 – 2010-11-16 14:30:35

+0

修改了我的答案。 – 2010-11-16 14:43:21

+0

感谢Tim Down,它工作正常。 – Warrior 2010-11-16 15:03:03

1

正如它在这个链接中所说:http://msdn.microsoft.com/en-us/library/ms536656%28VS.85%29.aspx pasteHML只接受HTML标签。 您可以使用的innerHTML属性,而不是:

range.innerHTML = content1; 
+0

它不工作 – Warrior 2010-11-16 14:20:05

+0

'TextRange'对象没有一个'innerHTML'属性。 – 2010-11-16 14:21:44

+0

@Tim Down:是否有其他方式像'execCommand(“inserthtml”,false,content1)' – Warrior 2010-11-16 14:24:56