Firstly, it is wrong to have several elements with the same id on one page. Secondly, why not render the HTML markup in data for convenience and in order not to produce a bunch of "modal windows"?
By decision: there is one element with id=modal - this is a modal window. When you hover on .info , we set up the top and left positions relative to the element on which we hover the mouse. Get data from the data-modal-text attribute, create #modal and insert data into it. When the mouse exits the element, we delete #modal .
$('.info').hover( function() { let top = $(this).offset().top + $(this).height(); let left = $(this).offset().left; let data = $(this).data('modal-text'); let div = document.createElement('div'); div.id = 'modal'; $(div).css('top', top); $(div).css('left', left); $(div).html(data); $('body').append(div); }, function() { $('#modal').remove(); });
.info { display: block width: 50px; height: 20px; background: red; margin-right: 40px; } #modal { width: 200px; border: solid 1px black; position: absolute; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <i class="info" data-modal-text="<p>ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p>">INFO</i> <i class="info" data-modal-text="<p>ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p>">INFO</i> <i class="info" data-modal-text="<p>ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p>">INFO</i> <i class="info" data-modal-text="<p>ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p>">INFO</i>
Or, if the HTML in these "modal windows" can be large, it will be more beautiful to present them as markup and provide the data-modal-id :
$('.info').hover( function() { let top = $(this).offset().top + $(this).height(); let left = $(this).offset().left; let modalId = '#' + $(this).data('modal-id'); let data = $(modalId).html(); let div = document.createElement('div'); div.id = 'modal'; $(div).css('top', top); $(div).css('left', left); $(div).html(data); $('body').append(div); }, function() { $('#modal').remove(); });
.info { display: block width: 50px; height: 20px; background: red; margin-right: 40px; } #modal { width: 200px; border: solid 1px black; position: absolute; } .modal-data { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <i class="info" data-modal-id="info1data">INFO</i> <i class="info" data-modal-id="info2data">INFO</i> <i class="info" data-modal-id="info3data">INFO</i> <i class="info" data-modal-id="info4data">INFO</i> <div id="info1data" class="modal-data"> <p>info1data: ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p> </div> <div id="info2data" class="modal-data"> <p>info2data: ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p> </div> <div id="info3data" class="modal-data"> <p>info3data: ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p> </div> <div id="info4data" class="modal-data"> <p>info4data: ΠΠ°Π²Π½ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ. ΡΠ΅ΠΊΡΡ ΠΌΠ΅ΡΠ°Π΅Ρ</p> </div>
Read: