tl; dr: (এটি এখানে চেষ্টা করুন )
আপনার যদি নিম্নলিখিত HTML থাকে:
<div id="menu" style="display: none;">
<!-- menu stuff in here -->
<ul><li>Menu item</li></ul>
</div>
<div class="parent">Hover over me to show the menu here</div>
তাহলে আপনি নিম্নলিখিত জাভাস্ক্রিপ্ট কোডটি ব্যবহার করতে পারেন:
$(".parent").mouseover(function() {
// .position() uses position relative to the offset parent,
var pos = $(this).position();
// .outerWidth() takes into account border and padding.
var width = $(this).outerWidth();
//show the menu directly over the placeholder
$("#menu").css({
position: "absolute",
top: pos.top + "px",
left: (pos.left + width) + "px"
}).show();
});
কিন্তু কাজ করে না!
এটি মেনু এবং স্থানধারকটির অফসেট প্যারেন্ট হিসাবে যতক্ষণ কাজ করবে। যদি সেগুলি না হয় এবং আপনার কাছে নেস্টেড সিএসএস বিধি নেই যা ডিওমে #menuউপাদানটি কোথায় রয়েছে সেদিকে খেয়াল রাখে :
$(this).append($("#menu"));
লাইনের ঠিক আগে #menuউপাদানটি অবস্থান করে ।
কিন্তু এটি এখনও কাজ করে না!
আপনার কিছু অদ্ভুত লেআউট থাকতে পারে যা এই পদ্ধতির সাথে কাজ করে না। সেক্ষেত্রে কেবল jQuery.ui এর অবস্থান প্লাগইন ( নীচের উত্তরে উল্লিখিত হিসাবে ) ব্যবহার করুন, যা প্রতিটি অনুমেয় ঘটনাকে পরিচালনা করে। মনে রাখবেন show()কল করার আগে আপনার মেনু উপাদানটি থাকতে হবে position({...}); প্লাগইন লুকানো উপাদান অবস্থান করতে পারে না।
3 বছর পরে 2012 সালে নোটগুলি আপডেট করুন:
(মূল সমাধানটি উত্তরোত্তর জন্য এখানে সংরক্ষণাগারভুক্ত করা হয়েছে )
সুতরাং, দেখা যাচ্ছে যে আমার এখানে মূল পদ্ধতিটি আদর্শ থেকে দূরে ছিল। বিশেষত, এটি ব্যর্থ হবে যদি:
- মেনুর অফসেট পিতা-মাতা স্থানধারকের অফসেট পিতামাতার নয়
- স্থানধারকের সীমানা / প্যাডিং রয়েছে
ভাগ্যক্রমে, jQuery এমন পদ্ধতিগুলি ( position()এবং outerWidth()) প্রবর্তন করে 1.2.২-এ ফিরে যা পরবর্তী ক্ষেত্রে এখানে সঠিক মান খুঁজে পাওয়া সহজ করে দেয়। পূর্ববর্তী ক্ষেত্রে, appendস্থানধারকটিতে মেনু উপাদানটি যুক্ত করা কাজ করে (তবে নীড়ের উপর ভিত্তি করে সিএসএসের নিয়মগুলি ভঙ্গ করবে)।