Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_14980201
ueditor
提交
74695454
U
ueditor
项目概览
qq_14980201
/
ueditor
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
ueditor
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
74695454
编写于
3月 01, 2013
作者:
Y
yancen
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev-1.2.5' of
https://github.com/campaign/ueditor
into dev-1.2.5
上级
bf739dbd
dec5c0c1
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
65 addition
and
230 deletion
+65
-230
_src/core/Editor.js
_src/core/Editor.js
+7
-163
_src/core/Range.js
_src/core/Range.js
+13
-0
_src/core/htmlparser.js
_src/core/htmlparser.js
+17
-10
_src/core/node.js
_src/core/node.js
+17
-0
_src/plugins/anchor.js
_src/plugins/anchor.js
+3
-1
_src/plugins/snapscreen.js
_src/plugins/snapscreen.js
+0
-3
_src/plugins/source.js
_src/plugins/source.js
+1
-3
_test/plugins/anchor.js
_test/plugins/anchor.js
+7
-50
未找到文件。
_src/core/Editor.js
浏览文件 @
74695454
...
...
@@ -437,50 +437,7 @@
* return false //编辑器没有内容 ,getContent直接返回空
* })
*/
getContent
:
function
(
cmd
,
fn
,
isPreview
)
{
// var me = this;
// if ( cmd && utils.isFunction( cmd ) ) {
// fn = cmd;
// cmd = '';
// }
// if ( fn ? !fn() : !this.hasContents() ) {
// return '';
// }
//// var range = me.selection.getRange(),
//// address = range.createAddress();
// var root = UE.htmlparser(me.body.innerHTML);
// me.fireEvent( 'beforegetcontent');
//
// me.filterOutputRule(root);
// var reg = new RegExp( domUtils.fillChar, 'g' ),
// //ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除
// html = me.body.innerHTML.replace( reg, '' ).replace( />[\t\r\n]*?</g, '><' );
// me.fireEvent( 'aftergetcontent', cmd );
// try{
// range.moveToAddress(address).select(true);
// }catch(e){}
// if ( me.serialize ) {
// var node = me.serialize.parseHTML( html );
// node = me.serialize.transformOutput( node );
// html = me.serialize.toHTML( node );
// }
//
// if ( ie && isPreview ) {
// //trace:2471
// //两个br会导致空行,所以这里先注视掉
// html = html//.replace(/<\s*br\s*\/?\s*>/gi,'<br/><br/>')
// .replace( /<p>\s*?<\/p>/g, '<p> </p>' );
// } else {
// //多个 要转换成空格加 的形式,要不预览时会所成一个
// html = html.replace( /( )+/g, function ( s ) {
// for ( var i = 0, str = [], l = s.split( ';' ).length - 1; i < l; i++ ) {
// str.push( i % 2 == 0 ? ' ' : ' ' );
// }
// return str.join( '' );
// } );
// }
//
// return html;
getContent
:
function
(
cmd
,
fn
)
{
var
me
=
this
;
if
(
cmd
&&
utils
.
isFunction
(
cmd
))
{
fn
=
cmd
;
...
...
@@ -501,22 +458,7 @@
range
.
moveToAddress
(
address
).
select
(
true
);
}
catch
(
e
){}
var
html
=
root
.
toHtml
();
if
(
ie
&&
isPreview
)
{
//trace:2471
//两个br会导致空行,所以这里先注视掉
html
=
html
.
replace
(
/<p>
\s
*
?
<
\/
p>/g
,
'
<p> </p>
'
);
}
else
{
//多个 要转换成空格加 的形式,要不预览时会所成一个
html
=
html
.
replace
(
/
(
)
+/g
,
function
(
s
)
{
for
(
var
i
=
0
,
str
=
[],
l
=
s
.
split
(
'
;
'
).
length
-
1
;
i
<
l
;
i
++
)
{
str
.
push
(
i
%
2
==
0
?
'
'
:
'
'
);
}
return
str
.
join
(
''
);
});
}
return
html
;
return
root
.
toHtml
();
},
/**
* 取得完整的html代码,可以直接显示成完整的html文档
...
...
@@ -583,116 +525,19 @@
* })
*/
setContent
:
function
(
html
,
isAppendTo
,
notFireSelectionchange
)
{
// var me = this,
// inline = utils.extend( {a:1, A:1}, dtd.$inline, true ),
// lastTagName;
//
// html = html
// .replace( /^[ \t\r\n]*?</, '<' )
// .replace( />[ \t\r\n]*?$/, '>' )
// //ie有时的源码会有> <的情况
// .replace(/>(?:(\s| )*?)</g,'><' )//代码高量的\n不能去除
// .replace( /[\s\/]?(\w+)?>[ \t\r\n]*?<\/?(\w+)/gi, function ( a, b, c ) {
// if ( b ) {
// lastTagName = c;
// } else {
// b = lastTagName;
// }
// return !inline[b] && !inline[c] ? a.replace( />[ \t\r\n]*?</, '><' ) : a;
// } );
// html = {'html':html};
// me.fireEvent( 'beforesetcontent',html,root);
// html = html.html;
// var serialize = this.serialize;
// if ( serialize ) {
// var node = serialize.parseHTML( html );
// node = serialize.transformInput( node );
// node = serialize.filter( node );
// html = serialize.toHTML( node );
// }
// //html.replace(new RegExp('[\t\n\r' + domUtils.fillChar + ']*','g'),'');
// //去掉了\t\n\r 如果有插入的代码,在源码切换所见即所得模式时,换行都丢掉了
// //\r在ie下的不可见字符,在源码切换时会变成多个
// //trace:1559
// this.body.innerHTML = (isAppendTo ? this.getContent() : '') + html.replace( new RegExp( '[\r' + domUtils.fillChar + ']*', 'g' ), '' );
// //处理ie6下innerHTML自动将相对路径转化成绝对路径的问题
// if ( browser.ie && browser.version < 7 ) {
// replaceSrc( this.document.body );
// }
// //给文本或者inline节点套p标签
// if ( me.options.enterTag == 'p' ) {
//
// var child = this.body.firstChild, tmpNode;
// if ( !child || child.nodeType == 1 &&
// (dtd.$cdata[child.tagName] ||
// domUtils.isCustomeNode( child )
// )
// && child === this.body.lastChild ) {
// this.body.innerHTML = '<p>' + (browser.ie ? ' ' : '<br/>') + '</p>' + this.body.innerHTML;
//
// } else {
// var p = me.document.createElement( 'p' );
// while ( child ) {
// while ( child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName]) ) {
// tmpNode = child.nextSibling;
// p.appendChild( child );
// child = tmpNode;
// }
// if ( p.firstChild ) {
// if ( !child ) {
// me.body.appendChild( p );
// break;
// } else {
// child.parentNode.insertBefore( p, child );
// p = me.document.createElement( 'p' );
// }
// }
// child = child.nextSibling;
// }
// }
// }
// me.fireEvent( 'aftersetcontent' );
// me.fireEvent( 'contentchange' );
// console.log(root.toHtml())
// !notFireSelectionchange && me._selectionChange();
// //清除保存的选区
// me._bakRange = me._bakIERange = null;
// //trace:1742 setContent后gecko能得到焦点问题
// var geckoSel;
// if ( browser.gecko && (geckoSel = this.selection.getNative()) ) {
// geckoSel.removeAllRanges();
// }
var
me
=
this
,
inline
=
utils
.
extend
({
a
:
1
,
A
:
1
},
dtd
.
$inline
,
true
),
lastTagName
;
html
=
html
.
replace
(
/^
[
\t\r\n]
*
?
</
,
'
<
'
)
.
replace
(
/>
[
\t\r\n]
*
?
$/
,
'
>
'
)
//ie有时的源码会有> <的情况
.
replace
(
/>
(?:(\s
|
)
*
?)
</g
,
'
><
'
)
//代码高量的\n不能去除
.
replace
(
/
[\s\/]?(\w
+
)?
>
[
\t\r\n]
*
?
<
\/?(\w
+
)
/gi
,
function
(
a
,
b
,
c
)
{
if
(
b
)
{
lastTagName
=
c
;
}
else
{
b
=
lastTagName
;
}
return
!
inline
[
b
]
&&
!
inline
[
c
]
?
a
.
replace
(
/>
[
\t\r\n]
*
?
</
,
'
><
'
)
:
a
;
});
var
me
=
this
;
me
.
fireEvent
(
'
beforesetcontent
'
,
html
);
var
root
=
UE
.
htmlparser
(
html
);
me
.
filterInputRule
(
root
);
html
=
root
.
toHtml
();
//html.replace(new RegExp('[\t\n\r' + domUtils.fillChar + ']*','g'),'');
//去掉了\t\n\r 如果有插入的代码,在源码切换所见即所得模式时,换行都丢掉了
//\r在ie下的不可见字符,在源码切换时会变成多个
//trace:1559
this
.
body
.
innerHTML
=
(
isAppendTo
?
this
.
getContent
()
:
''
)
+
html
.
replace
(
new
RegExp
(
'
[
\r
'
+
domUtils
.
fillChar
+
'
]*
'
,
'
g
'
),
''
);
me
.
body
.
innerHTML
=
(
isAppendTo
?
this
.
getContent
()
:
''
)
+
html
;
//处理ie6下innerHTML自动将相对路径转化成绝对路径的问题
if
(
browser
.
ie
&&
browser
.
version
<
7
)
{
replaceSrc
(
this
.
body
);
replaceSrc
(
me
.
body
);
}
//给文本或者inline节点套p标签
if
(
me
.
options
.
enterTag
==
'
p
'
)
{
...
...
@@ -1193,4 +1038,3 @@
};
utils
.
inherits
(
Editor
,
EventBase
);
})();
_src/core/Range.js
浏览文件 @
74695454
...
...
@@ -1223,6 +1223,19 @@
}
return
true
;
},
traversal
:
function
(
doFn
,
filterFn
){
if
(
this
.
collapsed
)
return
this
;
var
bookmark
=
this
.
createBookmark
(),
end
=
bookmark
.
end
,
current
=
domUtils
.
getNextDomNode
(
bookmark
.
start
,
false
,
filterFn
);
while
(
current
&&
current
!==
end
&&
(
domUtils
.
getPosition
(
current
,
end
)
&
domUtils
.
POSITION_PRECEDING
))
{
var
tmpNode
=
domUtils
.
getNextDomNode
(
current
,
false
,
filterFn
);
doFn
(
current
);
current
=
tmpNode
;
}
return
this
.
moveToBookmark
(
bookmark
);
}
};
})();
\ No newline at end of file
_src/core/htmlparser.js
浏览文件 @
74695454
...
...
@@ -3,7 +3,10 @@
var
htmlparser
=
UE
.
htmlparser
=
function
(
htmlstr
)
{
var
reg
=
new
RegExp
(
domUtils
.
fillChar
,
'
g
'
);
//ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除
htmlstr
=
htmlstr
.
replace
(
reg
,
''
).
replace
(
/>
[\t\r\n]
*
?
</g
,
'
><
'
);
htmlstr
=
htmlstr
.
replace
(
reg
,
''
)
.
replace
(
/
(?:
^
[
\t\r\n]
*
?
<
)
/
,
'
<
'
)
.
replace
(
/
(?:
>
[
\t\r\n]
*
?
$
)
/
,
'
>
'
)
.
replace
(
/>
(?:[
\t\r\n]
*
)
/g
,
'
>
'
).
replace
(
/
(?:[
\t\r\n]
*
)
</g
,
'
<
'
);
var
re_tag
=
/<
(?:(?:\/([^
>
]
+
)
>
)
|
(?:
!--
([\S
|
\s]
*
?)
-->
)
|
(?:([^\s\/
>
]
+
)\s
*
((?:(?:
"
[^
"
]
*"
)
|
(?:
'
[^
'
]
*'
)
|
[^
"'<>
])
*
)\/?
>
))
/g
,
re_attr
=
/
([\w\-
:.
]
+
)(?:(?:\s
*=
\s
*
(?:(?:
"
([^
"
]
*
)
"
)
|
(?:
'
([^
'
]
*
)
'
)
|
([^\s
>
]
+
)))
|
(?=\s
|$
))
/g
;
...
...
@@ -21,14 +24,22 @@ var htmlparser = UE.htmlparser = function (htmlstr) {
'
dt
'
:
'
dl
'
,
'
dd
'
:
'
dl
'
,
'
option
'
:
'
select
'
},
needChild
=
{
'
ol
'
:
'
li
'
,
'
ul
'
:
'
li
'
};
function
text
(
parent
,
data
)
{
parent
.
children
.
push
(
new
uNode
({
type
:
'
text
'
,
data
:
data
,
parentNode
:
parent
}));
if
(
needChild
[
parent
.
tagName
]){
var
tmpNode
=
uNode
.
createElement
(
needChild
[
parent
.
tagName
]);
parent
.
appendChild
(
tmpNode
);
tmpNode
.
appendChild
(
uNode
.
createText
(
data
));
parent
=
tmpNode
;
}
else
{
parent
.
appendChild
(
uNode
.
createText
(
data
));
}
}
function
element
(
parent
,
tagName
,
htmlattr
)
{
...
...
@@ -47,10 +58,6 @@ var htmlparser = UE.htmlparser = function (htmlstr) {
parent
=
element
(
parent
,
utils
.
isArray
(
needParentTag
)
?
needParentTag
[
0
]
:
needParentTag
)
}
}
// //根据dtd判断是否当前节点可以放入新的节点
// while(dtd[parent.tagName] && !dtd[parent.tagName][tagName]){
// parent = parent.parentNode;
// }
var
elm
=
new
uNode
({
parentNode
:
parent
,
...
...
_src/core/node.js
浏览文件 @
74695454
...
...
@@ -196,6 +196,23 @@
}
return
this
.
children
?
this
.
children
[
this
.
children
.
length
-
1
]
:
null
;
},
previousSibling
:
function
(){
var
parent
=
this
.
parentNode
;
for
(
var
i
=
0
,
ci
;
ci
=
parent
.
children
[
i
];
i
++
)
{
if
(
ci
===
this
)
{
return
i
==
0
?
null
:
parent
.
children
[
i
-
1
];
}
}
},
nextSibling
:
function
(){
var
parent
=
this
.
parentNode
;
for
(
var
i
=
0
,
ci
;
ci
=
parent
.
children
[
i
++
];)
{
if
(
ci
===
this
)
{
return
parent
.
children
[
i
];
}
}
},
replaceChild
:
function
(
target
,
source
)
{
if
(
this
.
children
)
{
if
(
target
.
parentNode
){
...
...
_src/plugins/anchor.js
浏览文件 @
74695454
...
...
@@ -40,7 +40,9 @@ UE.plugins['anchor'] = function (){
a
.
setAttr
({
anchorname
:
a
.
getAttr
(
'
name
'
),
'
class
'
:
'
anchorclass
'
})
});
a
.
setAttr
(
'
name
'
)
}
})
});
...
...
_src/plugins/snapscreen.js
浏览文件 @
74695454
...
...
@@ -59,9 +59,6 @@ UE.plugins['snapscreen'] = function(){
}
catch
(
e
){
me
.
ui
.
_dialogs
[
'
snapscreenDialog
'
].
open
();
}
},
queryCommandState
:
function
(){
return
this
.
highlight
?
-
1
:
0
;
}
};
}
...
...
_src/plugins/source.js
浏览文件 @
74695454
...
...
@@ -131,13 +131,11 @@
});
//重置getContent,源码模式下取值也能是最新的数据
me
.
getContent
=
function
(){
var
cont
=
sourceEditor
.
getContent
()
||
'
<p>
'
+
(
browser
.
ie
?
''
:
'
<br/>
'
)
+
'
</p>
'
;
return
cont
.
replace
(
/>
[
\n\r\t]
+/g
,
'
>
'
).
replace
(
/
[
\n\r\t]
+</g
,
'
<
'
).
replace
(
/>
[\n\r\t]
+</g
,
'
><
'
);
return
sourceEditor
.
getContent
()
||
'
<p>
'
+
(
browser
.
ie
?
''
:
'
<br/>
'
)
+
'
</p>
'
;
};
}
else
{
me
.
iframe
.
style
.
cssText
=
bakCssText
;
var
cont
=
sourceEditor
.
getContent
()
||
'
<p>
'
+
(
browser
.
ie
?
''
:
'
<br/>
'
)
+
'
</p>
'
;
cont
=
cont
.
replace
(
/>
[
\n\r\t]
+/g
,
'
>
'
).
replace
(
/
[
\n\r\t]
+</g
,
'
<
'
).
replace
(
/>
[\n\r\t]
+</g
,
'
><
'
);
me
.
setContent
(
cont
);
sourceEditor
.
dispose
();
sourceEditor
=
null
;
...
...
_test/plugins/anchor.js
浏览文件 @
74695454
...
...
@@ -5,17 +5,14 @@ test( '插入锚点后切换源码', function() {
var
range
=
te
.
obj
[
1
];
var
body
=
editor
.
body
;
stop
();
//1.2版本,ie中‘’-〉' '
var
br
=
baidu
.
editor
.
browser
.
ie
?
'
'
:
'
<br />
'
;
var
br
=
baidu
.
editor
.
browser
.
ie
?
'
'
:
'
<br />
'
;
//1.2版本,ie中‘’-〉' '
setTimeout
(
function
()
{
editor
.
setContent
(
'
<p>
'
+
br
+
'
</p>
'
);
range
.
setStart
(
body
.
firstChild
,
0
).
collapse
(
1
).
select
();
editor
.
execCommand
(
'
anchor
'
,
'
hello
'
);
//1.2版本后,在img前有的不可见字符没有删去,这里改成之比较img内的内容
// ua.checkHTMLSameStyle( '<img anchorname="hello" class="anchorclass">' + br, editor.document, body.firstChild, '检查锚点html' );
ua
.
checkHTMLSameStyle
(
'
<img anchorname="hello" class="anchorclass">
'
+
br
,
editor
.
document
,
body
.
firstChild
,
'
检查锚点html
'
);
//1.2版本后,在img前有的不可见字符没有删去,这里改成之比较img内的内容
ok
(
body
.
getElementsByTagName
(
'
img
'
)[
0
].
attributes
[
'
anchorname
'
].
nodeValue
==
"
hello
"
&&
body
.
getElementsByTagName
(
'
img
'
)[
0
].
attributes
[
'
class
'
].
nodeValue
==
"
anchorclass
"
,
'
检查锚点
'
);
editor
.
execCommand
(
'
source
'
);
/*切到源码模式下会有一个超时*/
editor
.
execCommand
(
'
source
'
);
/*切到源码模式下会有一个超时*/
setTimeout
(
function
()
{
var
tas
=
editor
.
iframe
.
parentNode
.
getElementsByTagName
(
'
textarea
'
);
ok
(
tas
[
0
].
value
.
indexOf
(
'
<a name="hello"
'
)
!=
-
1
||
tas
[
0
].
value
.
indexOf
(
'
<a anchorname="1"
'
)
!=
-
1
,
'
查看是否转换成功
'
);
...
...
@@ -29,55 +26,18 @@ test( '插入锚点后切换源码', function() {
},
10
);
},
20
);
}
);
//两次设定textarea中的内容总会出错,把这个用例拆成两个
//test( '在源码模式设置超链接的name属性,切换到编辑器模式检查超链接是否变为锚点', function() {
// var editor = te.obj[0];
// editor.setContent( '' );
// var body = editor.body;
// stop();
// /*切到源码模式下会有一个超时*/
// setTimeout( function() {
// editor.execCommand( 'source' );
// setTimeout( function() {
// var ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
// /*这种情况认为是锚点*/
//// ta.value
//// ta.textContent='<p><a name="source" anchorname="1"></a></p>';
// ta.value = '<p><a name="source" anchorname="1"></a></p>';
// setTimeout( function() {
// editor.execCommand( 'source' );
// ua.checkHTMLSameStyle( '<img anchorname="source" class="anchorclass">', editor.document, body.firstChild, '检查锚点html' );
// /*这种情况不应当转换为锚点*/
// editor.execCommand( 'source' );
// setTimeout( function() {
//// ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
// editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0].value = '<p><a name="source">你好</a></p>';
// setTimeout( function() {
// editor.execCommand( 'source' );
// equal( body.firstChild.firstChild.tagName.toLowerCase(), 'a', 'a标签不会转化' );
// /*用例结束前等一下,因为还有个超时操作会获取窗口*/
// setTimeout( function() {
// start();
// }, 50 );
// }, 50 );
// }, 50 );
// }, 20 );
// }, 10 );
// }, 20 );
//} );
test
(
'
在源码模式设置超链接的name属性,切换到编辑器模式检查超链接是否变为锚点
'
,
function
()
{
var
editor
=
te
.
obj
[
0
];
var
body
=
editor
.
body
;
stop
();
setTimeout
(
function
(){
editor
.
setContent
(
''
);
/*切到源码模式下会有一个超时*/
setTimeout
(
function
()
{
editor
.
execCommand
(
'
source
'
);
setTimeout
(
function
()
{
var
ta
=
editor
.
iframe
.
parentNode
.
getElementsByTagName
(
'
textarea
'
)[
0
];
/*这种情况认为是锚点*/
ta
.
value
=
'
<p><a name="source" anchorname="1"></a></p>
'
;
ta
.
value
=
'
<p><a name="source" anchorname="1"></a></p>
'
;
/*这种情况认为是锚点*/
setTimeout
(
function
()
{
editor
.
execCommand
(
'
source
'
);
ua
.
checkHTMLSameStyle
(
'
<img anchorname="source" class="anchorclass">
'
,
editor
.
document
,
body
.
firstChild
,
'
检查锚点html
'
);
...
...
@@ -88,22 +48,20 @@ test( '在源码模式设置超链接的name属性,切换到编辑器模式检
},
100
);
}
);
test
(
'
在源码模式设置超链接没有name属性,切换到编辑器模式检查超链接不变为锚点
'
,
function
()
{
var
editor
=
te
.
obj
[
0
];
editor
.
setContent
(
''
);
var
body
=
editor
.
body
;
stop
();
/*切到源码模式下会有一个超时*/
setTimeout
(
function
()
{
editor
.
execCommand
(
'
source
'
);
setTimeout
(
function
()
{
var
ta
=
editor
.
iframe
.
parentNode
.
getElementsByTagName
(
'
textarea
'
)[
0
];
ta
.
value
=
'
<p><a name="source">你好</a></p>
'
;
ta
.
value
=
'
<p><a name="source"
href="www.baidu.com"
>你好</a></p>
'
;
setTimeout
(
function
()
{
editor
.
execCommand
(
'
source
'
);
ua
.
manualDeleteFillData
(
editor
.
body
);
equal
(
body
.
firstChild
.
firstChild
.
tagName
.
toLowerCase
(),
'
a
'
,
'
a标签不会转化
'
);
start
();
},
50
);
...
...
@@ -120,7 +78,6 @@ test( '已存在锚点', function() {
range
.
selectNode
(
body
.
firstChild
).
select
();
editor
.
execCommand
(
'
anchor
'
,
'
hello
'
);
var
name
=
body
.
firstChild
.
firstChild
.
getAttribute
(
'
anchorname
'
);
// equal(ua.getChildHTML(editor.body),'<p><img anchorname=\"hello\" class=\"anchorclass\" _src=\"undefined\"></p>','更改name');
equal
(
name
,
'
hello
'
,
'
更改name
'
);
editor
.
setContent
(
'
<p><img anchorname="1" class="anchorclass"/></p>
'
);
range
.
selectNode
(
body
.
firstChild
).
select
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录