我阅读related帖子,但没有找到IE的解决方案,所以我要求针对这个问题的jQuery解决方案:
我有一些像这样的嵌套层次标题
<h1> heading 1</h1>
<h2> subheading 1</h2>
<h1> heading 2</h1>
<h2> subheading 1</h2>
<h2> subheading 2</h2>
我需要一些像这样的自动标题输出:
1. heading 1
1.2 subheading 1
2. heading 2
2.1. subheading 1
2.2. subheading 2
有没有一种方法可以使用jQuery或类似方法在IE6 +中工作?
答案 0 :(得分:5)
这是我的看法:
var segments = [];
$(':header').each(function() {
var level = parseInt(this.nodeName.substring(1), 10);
if(segments.length == level) {
// from Hn to another Hn, just increment the last segment
segments[level-1]++;
} else if(segments.length > level) {
// from Hn to Hn-x, slice off the last x segments, and increment the last of the remaining
segments = segments.slice(0, level);
segments[level-1]++;
} else if(segments.length < level) {
// from Hn to Hn+x, (should always be Hn+1, but I'm doing some error checks anyway)
// add '1' x times.
for(var i = 0; i < (level-segments.length); i++) {
segments.push(1);
}
}
$(this).text(segments.join('.') + '. ' + $(this).text());
});
答案 1 :(得分:5)
另一种可能性
var indices = [];
function addIndex() {
// jQuery will give all the HNs in document order
jQuery('h1,h2,h3,h4,h5,h6').each(function(i,e) {
var hIndex = parseInt(this.nodeName.substring(1)) - 1;
// just found a levelUp event
if (indices.length - 1 > hIndex) {
indices= indices.slice(0, hIndex + 1 );
}
// just found a levelDown event
if (indices[hIndex] == undefined) {
indices[hIndex] = 0;
}
// count + 1 at current level
indices[hIndex]++;
// display the full position in the hierarchy
jQuery(this).prepend(indices.join(".")+" "+this.tagName);
});
}
jQuery(document).ready(function() {
addIndex();
});
答案 2 :(得分:1)
<h2>
标记后面的所有<h1>
标记,并且恰好在下一个<h1>
标记之前,问题就会得到解决,对吧?
这段代码已经成功并且工作得很好
$("h1").each(function(mainHeadIndex)
{
// Numbering the main heads
$(this).html(mainHeadIndex +1 +'. ' + $(this).html());
// Find all the h2 tags right under this particular main head
$(this).nextUntil("h1").filter("h2").each(function(subIndex)
{
// calculate the right sub head number
var newSubIndex = subIndex+1;
// Numbering the sub heads
$(this).html(mainHeadIndex +1 +'.'+ newSubIndex +$(this).html());
});
})
P.S:谢谢你MatejB,我发帖之前我不知道jsfiddle.com:)
答案 3 :(得分:0)
这对我有用:
var i = 0; var j = 0; $('h1').each(function(index, element){ i++; $(element).text(i + '. ' + $(element).text()); j = 1; $(element).nextUntil('h1').each(function(subindex, subelement){ if (!$(this).is('h2')) return; // so subelements other than h2 can be left alone j++; $(subelement).text(i + '.' + j + '. ' + $(subelement).text()); }); });
答案 4 :(得分:0)
我认为你应该在DIV中包装H2子标题然后使用以下代码:
$(document).ready( function() { var result = 0; $('h1').each(function(index) { $(this).text((index + 1) + '. ' + $(this).text()); var saveIndexNum = index + 1; $(this).next().find('h2').each(function(index) { $(this).text(saveIndexNum + '.' +(index + 1) + ' ' + $(this).text()); }); }); });
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready( function() {
var result = 0;
$('h1').each(function(index) {
$(this).text((index + 1) + '. ' + $(this).text());
var saveIndexNum = index + 1;
$(this).next().find('h2').each(function(index) {
$(this).text(saveIndexNum + '.' +(index + 1) + ' ' + $(this).text());
});
});
});
</script>
<style>
h1
{
color:red;
}
.subheading h2
{
color:green;
}
.subheading
{
background:#e2e2e2;
}
</style>
</head>
<body>
<h1> heading 1</h1>
<div class="subheading">
<h2> subheading 1.1</h2>
</div>
<h1> heading 2</h1>
<div class="subheading">
<h2> subheading 2.1</h2>
<h2> subheading 2.2</h2>
<h2> subheading 2.3</h2>
<h2> subheading 2.4</h2>
<h2> subheading 2.5</h2>
</div>
<h1> heading 3</h1>
<div class="subheading">
<h2> subheading 3.1</h2>
<h2> subheading 3.2</h2>
</div>
<h1> heading 4</h1>
<div class="subheading">
<h2> subheading 4.1</h2>
<h2> subheading 4.2</h2>
</div>
</body></html>