AttributesToken - bhsd-harry/wikiparser-node GitHub Wiki

目录

Other Languages

简介

扩展和 HTML 标签及表格的属性。这个类继承了 Token 类的全部属性和方法,这里不再列出。

✅ 在 MiniBrowser 版本中可用。

Properties

attributes

展开

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"');

classList

展开

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=""');

className

展开

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, '');

id

展开

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, '');

name

✅ 展开

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');

sanitized

展开

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

✅ 展开

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');

Methods

cloneNode

展开

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);

css

展开

加入的版本: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"');

getAttr

✅ 展开

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);

getAttrNames

展开

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']));

getAttrs

展开

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,
});

getAttrToken

✅ 展开

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);

getAttrTokens

✅ 展开

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]);

hasAttr

✅ 展开

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'));

lint

✅ 展开

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: '',
		},
	},
]);

removeAttr

展开

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

展开

清理无效属性。

// 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 ');

setAttr

展开

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"');

toggleAttr

展开

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, '');

toHtml

展开

加入的版本: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"');
⚠️ **GitHub.com Fallback** ⚠️