AttributesToken - bhsd-harry/wikiparser-node GitHub Wiki
目录
扩展和 HTML 标签及表格的属性。这个类继承了 Token 类的全部属性和方法,这里不再列出。
展开
type: Record<string, string | true>
属性对象。
// attributes (main)
var attrs = Parser.parse('<poem COMPACT id="a/>').querySelector('ext-attrs');
assert.equal(attrs, ' COMPACT id="a');
assert.deepStrictEqual(attrs.attributes, {
compact: true,
id: 'a',
});
attrs.attributes = {title: 'b'};
assert.equal(attrs, ' title="b"');展开
type: Set<string>
以 Set 表示的 class 属性,只读。
// classList (main)
var attrs = Parser.parse('{|class="a b"\n|}').querySelector('table-attrs');
assert.equal(attrs, 'class="a b"');
assert.deepStrictEqual(attrs.classList, new Set(['a', 'b']));
attrs.classList.add('c');
assert.equal(attrs, 'class="a b c"');
attrs.classList.delete('a');
assert.equal(attrs, 'class="b c"');
attrs.classList.clear();
assert.equal(attrs, 'class=""');展开
type: string
以字符串表示的 class 属性。
// className (main)
var attrs = Parser.parse('<p class>').querySelector('html-attrs');
assert.equal(attrs, ' class');
assert.strictEqual(attrs.className, '');
attrs.className = 'a b';
assert.equal(attrs, ' class="a b"');
assert.strictEqual(attrs.className, 'a b');
attrs.className = '';
assert.equal(attrs, ' ');
assert.strictEqual(attrs.className, '');展开
type: string
id 属性。
// id (main)
var attrs = Parser.parse('<p id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id=a');
assert.strictEqual(attrs.id, 'a');
attrs.id = 'b';
assert.equal(attrs, ' id="b"');
assert.strictEqual(attrs.id, 'b');
attrs.id = '';
assert.equal(attrs, ' ');
assert.strictEqual(attrs.id, '');✅ 展开
type: string
小写的标签名,只读。
// name
var extAttrs = Parser.parse('<REF/>').querySelector('ext-attrs'),
tableAttrs = Parser.parse('{|\n!').querySelector('td')
.querySelector('table-attrs');
assert.strictEqual(extAttrs.name, 'ref');
assert.strictEqual(tableAttrs.name, 'th');展开
type: boolean
是否含有无效属性。
// sanitized (main)
var root = Parser.parse('{|id=a | class=b\n!! title="c"|\n|}'),
tableAttrs = root.querySelector('table>table-attrs'),
thAttrs = root.querySelector('td>table-attrs');
assert.equal(tableAttrs, 'id=a | class=b');
assert.equal(thAttrs, '! title="c"');
assert.ok(!tableAttrs.sanitized);
tableAttrs.sanitized = true;
assert.equal(tableAttrs, 'id=a class=b');
assert.ok(!thAttrs.sanitized);
thAttrs.sanitized = true;
assert.equal(thAttrs, 'title="c"');✅ 展开
type: string
节点类型。
// type
var attr = Parser.parse('<poem compact/>').querySelector('ext-attrs');
assert.equal(attr, ' compact');
assert.strictEqual(attr.type, 'ext-attrs');
attr = Parser.parse('<br id=a/>').querySelector('html-attrs');
assert.equal(attr, ' id=a');
assert.strictEqual(attr.type, 'html-attrs');
attr = Parser.parse('{|class="wikitable"').querySelector('table-attrs');
assert.equal(attr, 'class="wikitable"');
assert.strictEqual(attr.type, 'table-attrs');展开
returns: this
深拷贝节点。
// cloneNode (main)
var [ext, html, table] = Parser.parse('<ref name=a/><p id=b>\n{|id=c\n|}')
.querySelectorAll('ext-attrs, html-attrs, table-attrs');
assert.equal(ext, ' name=a');
assert.equal(html, ' id=b');
assert.equal(table, 'id=c');
assert.deepStrictEqual(ext.cloneNode(), ext);
assert.deepStrictEqual(html.cloneNode(), html);
assert.deepStrictEqual(table.cloneNode(), table);展开
加入的版本:1.17.1
param: string 属性名
param: string | number | undefined 属性值(可选)
returns: string | undefined
获取某一样式属性的值。
// css (main)
var attrs = Parser.parse('<p style=margin:auto;margin:0;>')
.querySelector('html-attrs');
assert.equal(attrs, ' style=margin:auto;margin:0;');
assert.strictEqual(attrs.css('margin'), '0');
attrs.css('margin', '0 0');
assert.equal(attrs, ' style="margin:auto;margin:0 0;"');
attrs.css('margin', '');
assert.equal(attrs, ' style=""');
attrs.css('padding', '0');
assert.equal(attrs, ' style="padding: 0"');
attrs.css('left', 0);
assert.equal(attrs, ' style="padding: 0; left: 0"');
attrs.css('right', '');
assert.equal(attrs, ' style="padding: 0; left: 0"');
attrs.css('padding', '');
assert.equal(attrs, ' style="left: 0"');
attrs = Parser.parse('<poem/>').querySelector('ext-attrs');
assert.equal(attrs, '');
attrs.css('left', 0);
assert.equal(attrs, ' style="left: 0"');✅ 展开
param: string 属性键
returns: string | true
获取指定属性。
// getAttr
var attrs = Parser.parse('<poem id="a" ID = b compact/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' id="a" ID = b compact');
assert.strictEqual(attrs.getAttr('id'), 'b');
assert.strictEqual(attrs.getAttr('COMPACT'), true);
assert.strictEqual(attrs.getAttr('title'), undefined);展开
returns(): Set<string>
获取全部的属性名。
// getAttrNames (main)
var attrs = Parser.parse('<poem id=a id=b COMPACT/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' id=a id=b COMPACT');
assert.deepStrictEqual(attrs.getAttrNames(), new Set(['id', 'compact']));展开
returns: Record<string, string | true>
获取全部属性。
// getAttrs (main)
var attrs = Parser.parse('<poem id=a COMPACT/>').querySelector('ext-attrs');
assert.equal(attrs, ' id=a COMPACT');
assert.deepStrictEqual(attrs.getAttrs(), {
id: 'a',
compact: true,
});✅ 展开
param: string 属性名
returns: AttributeToken
指定属性名的最后一个 AttributeToken。
// getAttrToken
var attrs = Parser.parse('<p id=a ID = b>').querySelector('html-attrs'),
[, attr] = attrs.querySelectorAll('html-attr');
assert.equal(attrs, ' id=a ID = b');
assert.equal(attr, 'ID = b');
assert.deepStrictEqual(attrs.getAttrToken('id'), attr);
assert.strictEqual(attrs.getAttrToken('title'), undefined);✅ 展开
param: string 属性名,可选
returns: AttributeToken[]
所有指定属性名的 AttributeToken。
// getAttrTokens
var attrs = Parser.parse('<poem id = a COMPACT/>').querySelector('ext-attrs'),
[id, compact] = attrs.querySelectorAll('ext-attr');
assert.equal(attrs, ' id = a COMPACT');
assert.equal(id, 'id = a');
assert.equal(compact, 'COMPACT');
assert.deepStrictEqual(attrs.getAttrTokens(), [id, compact]);
assert.deepStrictEqual(attrs.getAttrTokens('ID'), [id]);
assert.deepStrictEqual(attrs.getAttrTokens('compact'), [compact]);✅ 展开
param: string 属性键
returns: boolean
标签是否具有某属性。
// hasAttr
var attrs = Parser.parse('<poem id = a COMPACT/>').querySelector('ext-attrs');
assert.equal(attrs, ' id = a COMPACT');
assert.ok(attrs.hasAttr('ID'));
assert.ok(attrs.hasAttr('compact'));
assert.ok(!attrs.hasAttr('title'));✅ 展开
returns: LintError[]
报告潜在语法错误。
// lint
var attrs = Parser.parse('</p id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id=a');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-ignored',
severity: 'error',
message: 'attributes of a closing tag',
startLine: 0,
startCol: 3,
startIndex: 3,
endLine: 0,
endCol: 8,
endIndex: 8,
suggestions: [
{
desc: 'remove',
range: [3, 8],
text: '',
},
{
desc: 'open',
range: [1, 2],
text: '',
},
],
},
]);
attrs = Parser.parse('<p / >').querySelector('html-attrs');
assert.equal(attrs, ' / ');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-ignored',
severity: 'warning',
message: 'element containing an invalid attribute name',
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 5,
endIndex: 5,
suggestions: [
{
desc: 'remove',
range: [2, 5],
text: ' ',
},
],
},
]);
attrs = Parser.parse('<gallery mode mode="packed" MODE = packed/>')
.querySelector('ext-attrs');
assert.equal(attrs, ' mode mode="packed" MODE = packed');
assert.deepStrictEqual(attrs.lint(), [
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 9,
startIndex: 9,
endLine: 0,
endCol: 13,
endIndex: 13,
fix: {
desc: 'remove',
range: [9, 13],
text: '',
},
},
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 14,
startIndex: 14,
endLine: 0,
endCol: 27,
endIndex: 27,
suggestions: [
{
desc: 'remove',
range: [14, 27],
text: '',
},
],
},
{
rule: 'no-duplicate',
severity: 'error',
message: 'duplicate mode attribute',
startLine: 0,
startCol: 28,
startIndex: 28,
endLine: 0,
endCol: 41,
endIndex: 41,
fix: {
desc: 'remove',
range: [28, 41],
text: '',
},
},
]);展开
param: string 属性键
移除指定属性。
// removeAttr (main)
var attrs = Parser.parse('<p id id=a>').querySelector('html-attrs');
assert.equal(attrs, ' id id=a');
attrs.removeAttr('id');
assert.equal(attrs, ' ');展开
清理无效属性。
// sanitize (main)
var attrs = Parser.parse('<p / id=a | class=b >').querySelector('html-attrs');
assert.equal(attrs, ' / id=a | class=b ');
attrs.sanitize();
assert.equal(attrs, ' id=a class=b ');展开
param: string | Record<string, string | boolean> 属性键或属性对象
param: string | boolean 属性值
设置指定属性。
// setAttr (main)
var attrs = Parser.parse('<poem id=a/>').querySelector('ext-attrs');
assert.equal(attrs, ' id=a');
attrs.setAttr('class', false);
assert.equal(attrs, ' id=a');
attrs.setAttr('id', 'b');
assert.equal(attrs, ' id="b"');
attrs.setAttr('TITLE', 'b');
assert.equal(attrs, ' id="b" title="b"');
attrs.setAttr('compact', true);
assert.equal(attrs, ' id="b" title="b" compact');
attrs.setAttr({id: 'c', title: false});
assert.equal(attrs, ' id="c" compact');
attrs = Parser.parse('{{template|<p>}}').querySelector('html-attrs');
assert.equal(attrs, '');
attrs.setAttr('id', 'a');
assert.equal(attrs, ' id{{=}}"a"');展开
param: string 属性键
开关指定属性。
// toggleAttr (main)
var attrs = Parser.parse('<poem/>').querySelector('ext-attrs');
assert.equal(attrs, '');
attrs.toggleAttr('compact');
assert.equal(attrs, ' compact');
attrs.toggleAttr('COMPACT');
assert.equal(attrs, '');展开
加入的版本:1.10.0
returns: string
转换为 HTML。
// toHtml (main)
var {firstChild: {firstChild}} = Parser.parse('<p / id=a\nID = b>');
assert.equal(firstChild, ' / id=a\nID = b');
assert.strictEqual(firstChild.toHtml(), ' id="b"');