I'm new to JQuery i'm reading a book and i'm following the examples but i got stuck trying this:
$(document).ready(function () {
var $notes = $('<ol id="notes"></ol>').insertAfter('#hexagon');
$('span.footnote').each(function (index) {
$('<sup>' (index 1) '</sup>').insertAfter('.footer');
$(this).appendTo($notes).wrap('<li></li>');
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div >
<h1 id="f-title">Flatland: A Romance of Many Dimensions</h1>
<div id="f-author">by Edwin A. Abbott</div>
<h2>Part 1, Section 3</h2>
<h3 id="f-subtitle">Concerning the Inhabitants of Flatland</h3>
</div>
<div id="excerpt" >an excerpt</div>
<div >
<p >Our Professional Men and Gentlemen are Squares (to which class I myself belong) and Five-Sided Figures or <a href="http://en.wikipedia.org/wiki/Pentagon">Pentagons </a>.</p>
<p id="hexagon" >Next above these come the Nobility, of whom there are several degrees, beginning at Six-Sided Figures, or <a href="http://en.wikipedia.org/wiki/Hexagon"><span >Hexagons</span></a>, and from thence rising in the number of their sides till they receive the honourable title of <a href="http://en.wikipedia.org/wiki/Polygon"><span >Polygonal</span></a>, or many-Sided. Finally when the number of the sides becomes so numerous, and the sides themselves so small, that the figure cannot be distinguished from a <a href="http://en.wikipedia.org/wiki/Circle">circle</a>, he is included in the Circular or Priestly order; and this is the highest class of all.</p>
<br>
<p>
<blockquote >It is a <span >Law of Nature</span> with us that a male child shall have one more side than his father , so that each generation shall rise (as a rule) one step in the scale of development and nobility. Thus the son of a Square is a Pentagon; the son of a Pentagon, a Hexagon; and so on.
</blockquote>
</p><br>
</div>
<div >
<span >And how perfect a proof of the natural fitness and, I may almost say, the divine origin of thearistocratic constitution of the States of Flatland!</span>
<span >By a judicious use of this Law of Nature, the Polygons and Circles are almost always able to stifle sedition in its very cradle, taking advantage of the irrepressible and boundless hopefulness of the human mind.…</span>
</div>
I tried to change the JQuery so it appends to the class footer but it shows the each iteration as 21 in both links instead of 1 for the first link and 2 for the second link.
I tried using just (index) instead but it shows 10, but i want it to show 1 for the first link and 2 for the second link i kno that when you use index it will show the array 0 1 and the line
$('<sup>' (index 1) '</sup>').insertAfter('.footer');
just add 1 to the array to count 1 2.
CodePudding user response:
Your code does, what you want. But the order is reversed because you append each sup
after the .footer
class - and therefor BEFORE the sup
that is already appended. You could use a for
loop to reverse the order of the selected footnotes:
var footnotes = $('span.footnote');
for (i = footnotes.length - 1; i >= 0; i--) {...}
If you want the super numbers to be separated (maybe with a comma), you could use a ternary operator (a compressed if else statement) to append that separator if it's not the last element (becaue it's reverse, not the first element ;):
(i > 0 ? '' : ',')
Working example:
$(document).ready(function () {
var $notes = $('<ol id="notes"></ol>').insertAfter('#hexagon');
var footnotes = $('span.footnote');
for(i = footnotes.length - 1; i >= 0; i--){
$('<sup>' (i 1) (i > 0 ? '' : ',') '</sup>').insertAfter('.footer');
$(footnotes[i]).appendTo($notes).wrap('<li></li>');
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div >
<h1 id="f-title">Flatland: A Romance of Many Dimensions</h1>
<div id="f-author">by Edwin A. Abbott</div>
<h2>Part 1, Section 3</h2>
<h3 id="f-subtitle">Concerning the Inhabitants of Flatland</h3>
</div>
<div id="excerpt" >an excerpt</div>
<div >
<p >Our Professional Men and Gentlemen are Squares (to which class I myself belong) and Five-Sided Figures or <a href="http://en.wikipedia.org/wiki/Pentagon">Pentagons </a>.</p>
<p id="hexagon" >Next above these come the Nobility, of whom there are several degrees, beginning at Six-Sided Figures, or <a href="http://en.wikipedia.org/wiki/Hexagon"><span >Hexagons</span></a>, and from thence rising in the number of their sides till they receive the honourable title of <a href="http://en.wikipedia.org/wiki/Polygon"><span >Polygonal</span></a>, or many-Sided. Finally when the number of the sides becomes so numerous, and the sides themselves so small, that the figure cannot be distinguished from a <a href="http://en.wikipedia.org/wiki/Circle">circle</a>, he is included in the Circular or Priestly order; and this is the highest class of all.</p>
<br>
<p>
<blockquote >It is a <span >Law of Nature</span> with us that a male child shall have one more side than his father , so that each generation shall rise (as a rule) one step in the scale of development and nobility. Thus the son of a Square is a Pentagon; the son of a Pentagon, a Hexagon; and so on.
</blockquote>
</p><br>
</div>
<div >
<span >And how perfect a proof of the natural fitness and, I may almost say, the divine origin of thearistocratic constitution of the States of Flatland!</span>
<span >By a judicious use of this Law of Nature, the Polygons and Circles are almost always able to stifle sedition in its very cradle, taking advantage of the irrepressible and boundless hopefulness of the human mind.…</span>
</div>