【发布时间】:2021-05-15 03:30:25
【问题描述】:
我有一个插件,可以根据用户设置的自定义起始编号对标题标签进行编号。
它创建如下标题:
1. Heading level one
1.1. Heading level two
1.1.1. Heading level three
如果用户手动设置起始编号:
20. Heading level one
20.3. Heading level two
20.3.6. Heading level three
但是,当循环重复时,编号不会重置为 1,我似乎无法解决如何触发它:
20. Heading level one
20.3. Heading level two
20.3.6. Heading level three
20. Heading level one
20.4. Heading level two
20.4.6. Heading level three <-- this should renumber to 20.4.1
在第一个循环之后,我无法将以下 sn-p 重置回 1。我尝试过的所有操作都重置了所有迭代,导致header[3] 设置为1,但不仅仅是在第一次迭代之后。
if( levelNumber <= elementLevel ) {
numberText += startingNumbers[levelNumber] + ".";
}
测试代码
const header = [10, 20, 30, 40, 50, 60],
contentHeaders = document.querySelectorAll(
'h1, h2, h3, h4, h5, h6'
),
startingNumbers = [ 0, // null
header[0] - 1, // h1
header[1] - 1, // h2
header[2] - 1, // h3
header[3] - 1, // h4
header[4] - 1, // h5
header[5] - 1, // h6
];
for( var item in contentHeaders ) {
// this element from item number
var element = contentHeaders[item],
numberText = '';
// limit the heading tag number in search
const headingRegex = new RegExp('^H([1-6])$');
// does the element match a heading regex
if( !element || !element.tagName || !element.tagName.match( headingRegex ) ) {
// return to beginning of loop
continue;
}
// return the heading level number
var elementLevel = RegExp.$1;
// increment by 1
startingNumbers[elementLevel]++;
// loop through the headings
for( var levelNumber = 1; levelNumber <= 6; levelNumber++ ) {
// if the number is lt the element number
if( levelNumber <= elementLevel ) {
numberText += startingNumbers[levelNumber] + ".";
}
}
element.innerHTML = numberText + ' ' + element.innerText;
}
* { font-family: monospace; font-size: 16px !important; }
<h1>Heading 1</h1>
<p>I should be <code>10. Heading 1</code></p>
<h2>Heading 2</h2>
<p>I should be <code>10.20. Heading 2</code></p>
<h3>Heading 3</h3>
<p>I should be <code>10.20.30. Heading 3</code></p>
<h4>Heading 4</h4>
<p>I should be <code>10.20.30.40. Heading 4</code></p>
<h5>Heading 5</h5>
<p>I should be <code>10.20.30.40.50. Heading 5</code></p>
<h6>Heading 6</h6>
<p>I should be <code>10.20.30.40.50.60. Heading 6</code></p>
<hr>
<h2>Heading 2</h2>
<p>I should be <code>10.21. Heading 2</code></p>
<h3>Heading 3</h3>
<p>I should be <code>10.21.1 Heading 3</code></p>
<hr>
<h2>Heading 2</h2>
<p>I should be <code>10.22. Heading 2</code></p>
<h3>Heading 3</h3>
<p>I should be <code>10.22.1. Heading 3</code></p>
<h4>Heading 4</h4>
<p>I should be <code>10.22.1.1. Heading 4</code></p>
【问题讨论】:
-
格式良好、评论良好的minimal reproducible example。难得一见。希望你能得到答案!
-
欣赏它@adiga - 在测试、研究和探索之后,我已经坚持了足够长的时间来询问
标签: javascript node.js arrays loops for-loop