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: "",
},
},
]);
attrs = Parser.parse("<indicator/>").querySelector("ext-attrs");
assert.equal(attrs, "");
assert.deepStrictEqual(attrs.lint(), [
{
rule: "required-attr",
severity: "error",
message: "required name attribute is missing",
startLine: 0,
startCol: 10,
startIndex: 10,
endLine: 0,
endCol: 10,
endIndex: 10,
},
]);展开
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"');