简体   繁体   中英

How do i loop trough list and add a superscript to paragraph in JQuery

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 class="cell"> <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" class="cell">an excerpt</div> <div class="chapter cell"> <p class="square">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" class="nobility hexagon">Next above these come the Nobility, of whom there are several degrees, beginning at Six-Sided Figures, or <a class="hexagon" href="http://en.wikipedia.org/wiki/Hexagon"><span class="footer">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 class="footer">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 class="pull-quote">It is a <span class="drop">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 class="cell"> <span class="footnote">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 class="footnote">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;&hellip;</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.

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 class="cell"> <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" class="cell">an excerpt</div> <div class="chapter cell"> <p class="square">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" class="nobility hexagon">Next above these come the Nobility, of whom there are several degrees, beginning at Six-Sided Figures, or <a class="hexagon" href="http://en.wikipedia.org/wiki/Hexagon"><span class="footer">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 class="footer">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 class="pull-quote">It is a <span class="drop">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 class="cell"> <span class="footnote">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 class="footnote">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;&hellip;</span> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM