2012-12-19 2 views
25

मैं div तत्व बनाने और गतिशील रूप से उन पर प्रिंट आइटम बनाने की कोशिश कर रहा हूं। मैंने यह दिखाने के लिए a demo बनाया है कि मैं कहां पहुंचा हूं।सूची आइटम के बगल में div को संरेखित करना

मेरे कोड के साथ समस्या यह है कि यह उस सूची के बगल में दिखाई नहीं दे रहा है जहां मैं इसे चाहता हूं। इसके बजाय यह नीचे प्रदर्शित होता है। क्या मैं उस तत्व के बगल में नया div दिखा सकता हूं जिसे मैं आगे बढ़ा रहा हूं?

$(".bubble").live({ 
    mouseenter : function() { 
     $("#bubble").show(); 
     $("#bubble").html($(this).attr('id')); 
    }, 
    mouseleave : function() { 
     $("#bubble").empty(); 
    } 
}); 
#bubble{ 
    width:100px; 
    height:20px; 
    background-color:#666666; 
    position:absolute; 
    display:hidden; 
} 
<ul> 
    <li><span class="bubble" id="test1">test1</span></li> 
    <li><span class="bubble" id="test2">test2</span></li> 
    <li><span class="bubble" id="test3">test3</span></li> 
    <li><span class="bubble" id="test4">test4</span></li> 
    <li><span class="bubble" id="test5">test5</span></li> 
</ul> 
<div id="bubble"></div> 

उत्तर

23

आप li जो पर moused की जा रही है के लिए #bubble रिश्तेदार की स्थिति को निर्धारित करने की आवश्यकता । इस प्रयास करें:

$("ul").on('hover', '.bubble', function(e) { 
    if (e.type == 'mouseenter') { 
     var $el = $(this); 
     $("#bubble") 
      .html($el.attr('id')) 
      .css({ 
       top: $el.offset().top, 
       left: $el.offset().left + $el.width() 
      }) 
      .show(); 
    } 
    else { 
     $("#bubble").empty(); 
    } 
}); 

Example fiddle

ध्यान दें कि मैं live() के रूप में यह पदावनत किया गया है के उपयोग को हटा दिया है, और बदले में एक प्रतिनिधि के साथ on() इस्तेमाल किया। इसके अलावा मैंने hover ईवेंट का उपयोग किया।

+0

+1 '.on' का उपयोग करने के लिए +1 और फिड सुंदर बनाते हैं :-) –

+0

लेकिन यदि div गतिशील रूप से बनाया जा रहा है, तो केवल पहली बार काम करता है ... – user1371896

+0

@ user1371896 सत्य नहीं है, मैं एक प्रतिनिधि हैंडलर के साथ 'ऑन() 'का उपयोग कर रहा हूं, इसलिए यह' लाइव()' के रूप में व्यवहार करेगा लेकिन बेहतर प्रदर्शन के साथ। –

1

आप <ul> और <div> निम्नलिखित शैलियों यह काम करना चाहिए देते हैं।

display: inline; 
float: left; 
+0

कि जिस तरह से काम नहीं करता। बबल div शीर्ष पर बनी हुई है। –

+0

शायद मैं आपको सही ढंग से समस्या नहीं समझ पाया लेकिन निम्नलिखित सीएसएस नियम मेरे लिए काम करता है: 'ul, div {float: left; प्रदर्शन: इनलाइन} ' – micha

7

आशा इस मदद करता है:

JS-Fiddle Demo

मैं ली

$(".bubble").live({ 
      mouseenter : function() { 
       $("#bubble").html($(this).attr('id')); 
       $(this).append($("#bubble").show());    
      }, 
      mouseleave : function() { 
      $("#bubble").empty().hide(); 

      } 
    }); 
+1

+1 हालांकि 'डिस्प्ले: इनलाइन-ब्लॉक' कुछ गंदे छोटे हैक्स –

2

क्या मीका ने कहा करो और भी स्थिति को दूर करने के #bubble संलग्न: पूर्ण;

तो सीएसएस

#bubble{ 
width:100px; 
height:10px; 
background-color:#666666; 
display:hidden; 
display: inline; 
float: left; 
} 

ul{ 
display: inline; 
float: left; 
} 

http://jsfiddle.net/y44dR/21/

11

क्या एक शुद्ध सीएसएस समाधान के बारे में होना चाहिए?

HTML:

<ul> 
<li> 
    <span class="bubble" id="test1">test1</span> 
    <div>test1</div> 
</li> 
<li> 
    <span class="bubble" id="test2">test2</span> 
    <div>test2</div> 
</li> 
<li> 
    <span class="bubble" id="test3">test3</span> 
    <div>test3</div> 
</li> 
<li> 
    <span class="bubble" id="test4">test4</span> 
    <div>test4</div> 
</li> 
<li> 
    <span class="bubble" id="test5">test5</span> 
    <div>test5</div> 
</li> 
</ul> 

सीएसएस:

ul li div { 
    width: 100px; 
    height: 10px; 
    background-color: #666666; 
    position: absolute; 
    display: none; 
} 

ul li:hover div { 
    display: inline; 
} 

JSFiddle: http://jsfiddle.net/H2ZMc/

+0

के बिना आईई 7 में समस्याग्रस्त है, सभी उपलब्ध समाधानों में से मैं निश्चित रूप से इसे पसंद करता हूं और यह आईई 7 में भी काम करता है! अच्छा! – SaschaM78

+1

@ SaschaM78 धन्यवाद, दयालु महोदय। मैं आम तौर पर समाधान पसंद करता हूं जो आईई 7 को तोड़ता है: पी लेकिन इस मामले में मैं अपवाद दूंगा। – mkey

+1

ओपी का सवाल कहता है: * मैं div तत्वों को बनाने की कोशिश कर रहा हूं और ** उन पर ** प्रिंट ** आइटम तैयार कर रहा हूं। आपके शुद्ध सीएसएस समाधान के साथ समस्या यह है कि आप आइटम को हाइलाइट किए गए 'div' पर प्रिंट नहीं कर सकते हैं। हालांकि प्रभावशाली काम! –

3

इस प्रयास करें:

var bubble = $("#bubble"); 

$(".bubble").live({ 
    mouseenter : function(e) {  
     $("#bubble").html($(this).attr('id')); 
     e.target.appendChild(bubble); 
    }, 

    mouseleave : function() { 
     $("#bubble").empty();   
    } 
}); 

क्या करता है तत्व है जिस पर माउस खत्म हो गया है करने के लिए बुलबुला तत्व जोड़ देता है। display: inline को div पर लागू करके आप इसे नीचे के बजाय अपने भाई के बगल में दिखाई दे सकते हैं क्योंकि यदि आप सीधे इस कोड का उपयोग करते हैं तो यह होगा।

1
$(".bubble").live({ 
    mouseenter: function() { 
     $("#bubble").show(); 
     $("#bubble").html($(this).attr('id')); 

     var p = $(this).position(); 
     $("#bubble").css({left: p.left + $(this).outerWidth(), top: p.top }); 
    }, 
    mouseleave: function() { 
     $("#bubble").empty().css({top: '', left: ''}); 
    } 
});​ 
+2

घुटने देगा, 10 से कम jQuery ऑब्जेक्ट्स का उपयोग नहीं किया गया है, उनमें से 7 उसी चयनकर्ता का उपयोग कर रहे हैं ... अच्छा दुख! –

+0

आपकी टिप्पणी के लिए धन्यवाद। मैंने इसके बारे में कभी नहीं सोचा। यह मेरी शैली में सुधार करेगा! –

+0

कोई समस्या नहीं, jQuery की असली सुंदरता श्रृंखला की क्षमता है, इसलिए '$ ('# बबल') खाली()। सीएसएस ({" शीर्ष ": ''," बाएं ": ''}}; ' ओवरहेड के रूप में केवल एक jQuery ऑब्जेक्ट के साथ एक ही चीज़ प्राप्त करें :) –

2

क्यों .on() का उपयोग करते हैं #bubble तत्व पहले से मौजूद है।

$(".bubble").hover(function() { 

    var offset = $(this).offset(); 

    $("#bubble").html($(this).attr("id")) 
     .css({ top: offset.top, left: offset.left + $(this).width() }) 
     .show(); 
}, function() { 
    $("#bubble").html("").hide(); 
}); 

फिडल here

+0

क्या होगा यदि मेरी सूची सही से गठबंधन की गई हो ?? – user1371896

+0

फिर बाएं सीएसएस संपत्ति को सेट करने के लिए 'left: offset.left - $ ("# bubble") का उपयोग करें। चौड़ाई() '। पहेली [** यहां **] (http://jsfiddle.net/bruno/y44dR/25/) – Bruno