-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathteditor.util.js
79 lines (70 loc) · 2.06 KB
/
teditor.util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
* TEditor (Tencent HTML5 Rich Editor)
* Copyright (c) 2012, webpluz.org, All rights reserved.
* https://github.com/qwt/TEditor
*
* @version 1.0
* @author Azrael(<a href="mailto:[email protected]">[email protected]</a>)
*
*/
/**
* @description
* HTML5 富文本编辑器
* 工具方法包
*
*/
;Jx().$package('TE.util', function(J){
this.getWindow = function(iframe){
return iframe.contentWindow;
}
this.getDocument = function(iframe){
return this.getWindow(iframe).document;
}
/**
* 获取当前页面的selection对象
* @return {Selection}
*/
this.getSelection = function(win) {
win = win || window;
var doc = win.document;
//先判断ie专有的, 因为ie9对range的支持不完全啊>_<
return (doc.selection) ? doc.selection : win.getSelection();
};
/**
* 获取选中区, 如果传入了container, 则返回container的range
* @param {HTMLElement} container, 目标range的容器, 可选
* @return {Range}, null
*/
this.getRange = function(win, container) {
var selection = this.getSelection(win);
if (!selection) {
return null;
}
var range = selection.getRangeAt ? (selection.rangeCount ? selection.getRangeAt(0) : null) : selection.createRange();
if (!range) {
return null;
}
if (container) {
if (this.contains(container, range)) {
return range;
} else {
return null;
}
} else {
return range;
}
};
/**
* 判断一个range是否被包含在container中
* @param {HTMLElement} container
* @param {Range} range
* @return {Boolean}
*/
this.contains = function(container, range) {
var rangeParent = range.commonAncestorContainer || (range.parentElement && range.parentElement()) || null;
if (rangeParent) {
return J.dom.contains(container, rangeParent, true);
}
return false;
};
});