-
Notifications
You must be signed in to change notification settings - Fork 2
AstRange
目录
仿照 Range 类设计,属性和方法也和 Range 类非常相似。主要的区别在于 AstRange 的起点和终点间必须为同一节点的连续子节点。
以下所有属性和方法在 Mini 和 Browser 版本中均不可用。
展开
type: AstNode
起点容器,只读。
// startContainer
var root = Parser.parse(''),
range = root.createRange();
range.setStart(root, 0);
assert.strictEqual(range.startContainer, root);
展开
type: number
起点位置,只读。
// startOffset
var root = Parser.parse(''),
range = root.createRange();
range.setStart(root, 0);
assert.strictEqual(range.startOffset, 0);
展开
type: number
起点绝对位置,只读。
// startIndex
var root = Parser.parse([[a]]b'),
range = root.createRange();
range.setStart(root, 1);
assert.strictEqual(range.startIndex, 5);
展开
type: {top: number, left: number}
起点行列位置,只读。
// startPos
var root = Parser.parse([[a]]b'),
range = root.createRange();
range.setStart(root, 1);
assert.deepStrictEqual(range.startPos, {top: 0, left: 5});
展开
type: AstNode
终点容器,只读。
// endContainer
var root = Parser.parse(''),
range = root.createRange();
range.setEnd(root, 0);
assert.strictEqual(range.endContainer, root);
展开
type: number
终点位置,只读。
// endOffset
var root = Parser.parse(''),
range = root.createRange();
range.setEnd(root, 0);
assert.strictEqual(range.endOffset, 0);
展开
type: number
终点绝对位置,只读。
// endIndex
var root = Parser.parse([[a]]b'),
range = root.createRange();
range.setEnd(root, 1);
assert.strictEqual(range.endIndex, 5);
展开
type: {top: number, left: number}
终点行列位置,只读。
// endPos
var root = Parser.parse([[a]]b'),
range = root.createRange();
range.setEnd(root, 1);
assert.deepStrictEqual(range.endPos, {top: 0, left: 5});
展开
type: boolean
起始和终止位置是否重合,只读。
// collapsed
var root = Parser.parse('a'),
range = root.createRange();
range.setStart(root, 0);
range.setEnd(root, 0);
assert(range.collapsed);
range.setEnd(root, 1);
assert(!range.collapsed);
展开
type: AstNode
最近的公共祖先,只读。
// commonAncestorContainer
var root = Parser.parse('a[[b]]'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 0);
range.setEnd(firstChild, 1);
assert.strictEqual(range.commonAncestorContainer, firstChild);
range.setEnd(root, 2);
assert.strictEqual(range.commonAncestorContainer, root);
展开
param: AstNode
起点容器
param: number
起点位置
设置起点。
展开
param: AstNode
终点容器
param: number
终点位置
设置终点。
展开
param: AstNode
节点
在节点后设置起点。
// setStartAfter
var root = Parser.parse('a'),
{firstChild} = root,
range = root.createRange();
range.setStartAfter(firstChild);
assert.strictEqual(range.startContainer, root);
assert.strictEqual(range.startOffset, 1);
展开
param: AstNode
节点
在节点后设置终点。
// setEndAfter
var root = Parser.parse('a'),
{firstChild} = root,
range = root.createRange();
range.setEndAfter(firstChild);
assert.strictEqual(range.endContainer, root);
assert.strictEqual(range.endOffset, 1);
展开
param: AstNode
节点
在节点前设置起点。
// setStartBefore
var root = Parser.parse('a'),
{firstChild} = root,
range = root.createRange();
range.setStartBefore(firstChild);
assert.strictEqual(range.startContainer, root);
assert.strictEqual(range.startOffset, 0);
展开
param: AstNode
节点
在节点前设置终点。
// setEndBefore
var root = Parser.parse('a'),
{firstChild} = root,
range = root.createRange();
range.setEndBefore(firstChild);
assert.strictEqual(range.endContainer, root);
assert.strictEqual(range.endOffset, 0);
展开
param: AstNode
节点
设置 Range 包含整个节点的内容。
// selectNodeContents
var {firstChild} = Parser.parse('[[a|b]]'),
range = firstChild.createRange();
range.selectNodeContents(firstChild);
assert.strictEqual(range.startContainer, firstChild);
assert.strictEqual(range.startOffset, 0);
assert.strictEqual(range.endContainer, firstChild);
assert.strictEqual(range.endOffset, 2);
展开
param: AstNode
节点
设置 Range 包含整个节点。
// selectNode
var root = Parser.parse('[[a]]'),
{firstChild} = root,
range = root.createRange();
range.selectNode(firstChild);
assert.strictEqual(range.startContainer, root);
assert.strictEqual(range.startOffset, 0);
assert.strictEqual(range.endContainer, root);
assert.strictEqual(range.endOffset, 1);
展开
param: boolean
重合至起始位置,默认行为是重合至终止位置
使起始和终止位置重合。
// collapse
var root = Parser.parse('a'),
range = root.createRange();
range.setEnd(root, 1);
range.collapse();
assert.strictEqual(range.startContainer, root);
assert.strictEqual(range.startOffset, 1);
range.setStart(root, 0);
range.collapse(true);
assert.strictEqual(range.endContainer, root);
assert.strictEqual(range.endOffset, 0);
展开
param: AstNode
端点容器
param: number
端点位置
returns: -1 | 0 | 1
比较端点和 Range 的位置。
// comparePoint
var root = Parser.parse('abcd'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(firstChild, 3);
assert.equal(range, 'bc');
assert.strictEqual(range.comparePoint(firstChild, 0), -1);
assert.strictEqual(range.comparePoint(firstChild, 2), 0);
assert.strictEqual(range.comparePoint(firstChild, 4), 1);
展开
param: AstNode
端点容器
param: number
端点位置
returns: boolean
端点是否在Range中。
// isPointInRange
var root = Parser.parse('abcd'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(firstChild, 3);
assert.equal(range, 'bc');
assert(!range.isPointInRange(firstChild, 0));
assert(range.isPointInRange(firstChild, 2));
展开
returns: AstRange
复制 AstRange 对象。
// cloneRange
var root = Parser.parse('a'),
range = root.createRange();
range.setStart(root, 0);
range.setEnd(root, 1);
assert.deepStrictEqual(range.cloneRange(), range);
展开
删除 Range 中的内容。
// deleteContents
var root = Parser.parse('ab[[c]]'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(root, 2);
assert.equal(range, 'b[[c]]');
range.deleteContents();
assert.equal(root, 'a');
assert.strictEqual(range.startContainer, root);
assert.strictEqual(range.startOffset, 1);
assert.strictEqual(range.endContainer, root);
assert.strictEqual(range.endOffset, 1);
展开
returns: {top: number, left: number, height: number, left: number}
获取行列位置和大小。
// getBoundingClientRect
var root = Parser.parse('ab\n[[c]]'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(root, 2);
assert.equal(range, 'b\n[[c]]');
assert.deepStrictEqual(range.getBoundingClientRect(), {
top: 0,
left: 1,
height: 2,
width: 5,
});
展开
param: AstNode | string
插入的节点
在起始位置插入节点。
// insertNode
var root = Parser.parse('ab[[c]]'),
{firstChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(root, 2);
assert.equal(range, 'b[[c]]');
range.insertNode('d');
assert.equal(root, 'adb[[c]]');
assert.equal(range, 'b[[c]]');
展开
returns: AstNode[]
在满足条件时获取范围内的全部节点。
// extractContents
var root = Parser.parse('ab[[c]]'),
{firstChild, lastChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(root, 2);
assert.equal(range, 'b[[c]]');
var extracted = range.extractContents();
assert.deepStrictEqual(extracted, [
root.createTextNode('b'),
lastChild,
]);
assert.strictEqual(extracted[1], lastChild);
assert.equal(range, 'b[[c]]');
展开
returns: AstNode[]
在满足条件时拷贝范围内的全部节点。
// cloneContents
var root = Parser.parse('ab[[c]]'),
{firstChild, lastChild} = root,
range = root.createRange();
range.setStart(firstChild, 1);
range.setEnd(root, 2);
assert.equal(range, 'b[[c]]');
var cloned = range.cloneContents();
assert.deepStrictEqual(cloned, [
root.createTextNode('b'),
lastChild,
]);
assert(cloned[1] !== lastChild);
assert.equal(range, 'b[[c]]');
对维基文本批量执行语法检查的命令行工具
用于维基文本的 ESLint 插件
A command-line tool that performs linting on Wikitext in bulk
ESLint plugin for Wikitext