Skip to content

ParameterToken

Bhsd edited this page Apr 18, 2026 · 28 revisions
目录

Other Languages

简介

模板或魔术字的参数。这个类继承了 Token 类的全部属性和方法,这里不再列出。

✅ 在 MiniBrowser 版本中可用。
🌐 在 Browser 版本中可用。

Properties

name

✅ 展开

type: string
参数名,只读。

// name
var [anonymous, named] = Parser.parse("{{a|b|c=}}")
	.querySelectorAll("parameter");
assert.equal(anonymous, "b");
assert.equal(named, "c=");
assert.strictEqual(anonymous.name, "1");
assert.strictEqual(named.name, "c");
// name (main)
var named = Parser.parse("{{a|b=1}}").querySelector("parameter");
named.firstChild.replaceChildren("c");
assert.strictEqual(named.name, "c");

anon

✅ 展开

type: boolean
是否是匿名参数。在 MiniBrowser 版本中为只读属性。

// anon
var [anonymous, named] = Parser.parse("{{a|b|c=}}")
	.querySelectorAll("parameter");
assert.equal(anonymous, "b");
assert.equal(named, "c=");
assert.ok(anonymous.anon);
assert.ok(!named.anon);
// anon (main)
var [anonymous] = Parser.parse("{{a|b}}").querySelectorAll("parameter");
anonymous.anon = false;
assert.equal(anonymous, "1=b");

duplicated

🌐 展开

type: boolean
是否是重复参数。在 Browser 版本中为只读属性。

// duplicated (print)
var root = Parser.parse("{{a|b|1=}}"),
	[anonymous, named] = root.querySelectorAll("parameter");
assert.equal(anonymous, "b");
assert.equal(named, "1=");
assert.ok(anonymous.duplicated);
assert.ok(named.duplicated);
// duplicated (main)
var root = Parser.parse("{{a|b|1=}}"),
	[anonymous] = root.querySelectorAll("parameter");
assert.equal(anonymous, "b");
anonymous.duplicated = false;
assert.equal(root, "{{a|b}}");

value

展开

type: string
参见 getValuesetValue 方法。

Methods

lint

✅ 展开

returns: LintError[]
报告潜在语法错误。

// lint
var parameter = Parser.parse("{{a|http://a.com/index.php?a=1}}")
	.querySelector("parameter");
assert.equal(parameter, "http://a.com/index.php?a=1");
assert.deepStrictEqual(parameter.lint(), [
	{
		rule: "unescaped",
		severity: "error",
		message: "unescaped query string in an anonymous parameter",
		startLine: 0,
		startCol: 28,
		startIndex: 28,
		endLine: 0,
		endCol: 29,
		endIndex: 29,
		fix: {
			range: [28, 29],
			text: "{{=}}",
			desc: "escape",
		},
	},
]);

json

🌐 展开

将语法树保存为 JSON。

// json (print)
var parameter = Parser.parse("{{a|1=|}}").querySelector("parameter");
assert.equal(parameter, "1=");
assert.deepStrictEqual(parameter.json(), {
	range: [4, 6],
	type: "parameter",
	name: "1",
	anon: false,
	duplicated: true,
	childNodes: [
		{
			range: [4, 5],
			type: "parameter-key",
			childNodes: [
				{
					range: [4, 5],
					data: "1",
				},
			],
		},
		{
			range: [6, 6],
			type: "parameter-value",
			childNodes: [
				{
					range: [6, 6],
					data: "",
				},
			],
		},
	],
});

cloneNode

展开

returns: this
深拷贝节点。

// cloneNode (main)
var [anonymous, named] = Parser.parse("{{a|b|c=}}")
	.querySelectorAll("parameter");
assert.equal(anonymous, "b");
assert.equal(named, "c=");
assert.deepStrictEqual(anonymous.cloneNode(), anonymous);
assert.deepStrictEqual(named.cloneNode(), named);

getValue

展开

returns: string
获取参数值。

// getValue (main)
var [anonymous, named] = Parser.parse("{{a| b | c = 1 }}")
	.querySelectorAll("parameter");
assert.equal(anonymous, " b ");
assert.equal(named, " c = 1 ");
assert.strictEqual(anonymous.getValue(), " b "); // 模板的匿名参数保留首尾的空白字符
assert.strictEqual(named.getValue(), "1"); // 模板的命名参数不保留首尾的空白字符

setValue

展开

param: string 参数值
设置参数值。

// setValue (main)
var parameter = Parser.parse("{{a|b=1}}").querySelector("parameter");
assert.equal(parameter, "b=1");
parameter.setValue(" 2 ");
assert.equal(parameter, "b= 2 "); // setValue方法总是保留空白字符,哪怕是无效的

rename

展开

param: string 新参数名
修改参数名。

// rename (main)
var parameter = Parser.parse("{{a|b=1}}").querySelector("parameter");
assert.equal(parameter, "b=1");
parameter.rename("c");
assert.equal(parameter, "c=1");

escape

展开

加入的版本:1.1.4

转义参数值中的 =

// escape (main)
var parameter = Parser.parse("{{a|1=b=c}}").querySelector("parameter");
assert.equal(parameter, "1=b=c");
parameter.escape();
assert.equal(parameter, "1=b{{=}}c");

Clone this wiki locally