मैं एक निश्चित ऊंचाई के साथ एक div है और overflow:hidden;
मैं jQuery के साथ जांच करना चाहता हूं कि क्या div में तत्व हैं जो div की निश्चित ऊंचाई से अधिक बह रहे हैं। मैं यह कैसे कर सकता हूँ?
मैं एक निश्चित ऊंचाई के साथ एक div है और overflow:hidden;
मैं jQuery के साथ जांच करना चाहता हूं कि क्या div में तत्व हैं जो div की निश्चित ऊंचाई से अधिक बह रहे हैं। मैं यह कैसे कर सकता हूँ?
जवाबों:
यदि वास्तव में कोई अतिप्रवाह हो रहा है या नहीं, यह जांचने के लिए आपको वास्तव में किसी भी jQuery की आवश्यकता नहीं है। का उपयोग करते हुए element.offsetHeight, element.offsetWidth, element.scrollHeightऔर element.scrollWidthआप निर्धारित कर सकते हैं यदि आपके तत्व यह आकार की तुलना में सामग्री बड़ा है:
if (element.offsetHeight < element.scrollHeight ||
element.offsetWidth < element.scrollWidth) {
// your element have overflow
} else {
// your element doesn't have overflow
}
कार्रवाई में उदाहरण देखें: फिडल
लेकिन अगर आप जानना चाहते हैं कि आपके तत्व के अंदर कौन सा तत्व दिखाई दे रहा है या नहीं, तो आपको अधिक गणना करने की आवश्यकता है। दृश्यता की दृष्टि से बाल तत्व के लिए तीन अवस्थाएँ हैं:

यदि आप अर्ध-दृश्य वस्तुओं को गिनना चाहते हैं तो यह वह स्क्रिप्ट होगी जिसकी आपको आवश्यकता है:
var invisibleItems = [];
for(var i=0; i<element.childElementCount; i++){
if (element.children[i].offsetTop + element.children[i].offsetHeight >
element.offsetTop + element.offsetHeight ||
element.children[i].offsetLeft + element.children[i].offsetWidth >
element.offsetLeft + element.offsetWidth ){
invisibleItems.push(element.children[i]);
}
}
और अगर आप अर्ध-दृश्य की गणना नहीं करना चाहते हैं तो आप थोड़े अंतर से गणना कर सकते हैं।
<p>एक ब्लॉक स्तर का तत्व है और 100% चौड़ाई लेता है। यदि आप पी के अंदर पाठ की मात्रा के साथ यह कोशिश करना चाहते हैं तो बस बनायें p{display:inline}। इस तरह से पाठ अंदर की चौड़ाई निर्धारित करता है p।
मेरे पास ओपी के रूप में एक ही सवाल था, और उन जवाबों में से किसी ने मेरी जरूरतों को पूरा नहीं किया। मुझे एक साधारण शर्त की जरूरत थी, एक साधारण जरूरत के लिए।
यहाँ मेरा जवाब है:
if ($("#myoverflowingelement").prop('scrollWidth') > $("#myoverflowingelement").width() ) {
alert("this element is overflowing !!");
}
else {
alert("this element is not overflowing!!");
}
इसके अलावा, आप बदल सकते हैं scrollWidthद्वारा scrollHeightआप या तो मामले का परीक्षण करने की जरूरत है।
इसलिए मैंने ओवरफ्लोिंग जक्वरी लाइब्रेरी का इस्तेमाल किया: https://github.com/kevinmarx/overflowing
पुस्तकालय स्थापित करने के बाद, यदि आप overflowingसभी अतिप्रवाह तत्वों को वर्ग निर्दिष्ट करना चाहते हैं, तो आप बस चलाते हैं:
$('.targetElement').overflowing('.parentElement')
यह तब कक्षा देगा overflowing, जैसे <div class="targetElement overflowing">कि उन सभी तत्वों को जो अतिप्रवाह कर रहे हैं। आप इसे कुछ ईवेंट हैंडलर (क्लिक, माउसओवर) या अन्य फ़ंक्शन में जोड़ सकते हैं जो उपरोक्त कोड चलाएगा ताकि यह गतिशील रूप से अपडेट हो।
मोहसिन के उत्तर के आधार पर आंशिक रूप से (जोड़ी गई पहली शर्त उस मामले को शामिल करती है जहां बच्चे को माता-पिता से पहले छिपाया जाता है):
jQuery.fn.isChildOverflowing = function (child) {
var p = jQuery(this).get(0);
var el = jQuery(child).get(0);
return (el.offsetTop < p.offsetTop || el.offsetLeft < p.offsetLeft) ||
(el.offsetTop + el.offsetHeight > p.offsetTop + p.offsetHeight || el.offsetLeft + el.offsetWidth > p.offsetLeft + p.offsetWidth);
};
तो बस करो:
jQuery('#parent').isChildOverflowing('#child');
एक तरीका खुद के खिलाफ स्क्रॉलटॉप की जांच करना है। सामग्री को उसके आकार से बड़ा मान दें और फिर देखें कि उसका स्क्रॉलटॉप 0 है या नहीं (यदि यह 0 नहीं है, तो यह अतिप्रवाह है)।
सादे अंग्रेजी में: मूल तत्व प्राप्त करें। यह ऊँचाई की जाँच करें, और उस मान को बचाएं। फिर सभी बच्चे तत्वों के माध्यम से लूप करें और उनकी व्यक्तिगत ऊंचाइयों की जांच करें।
यह गंदा है, लेकिन आपको मूल विचार मिल सकता है: http://jsfiddle.net/VgDgz/
यहाँ एक शुद्ध jQuery समाधान है, लेकिन यह बल्कि गड़बड़ है:
var div_height = $(this).height();
var vertical_div_top_position = $(this).offset().top;
var lastchild_height = $(this).children('p:last-child').height();
var vertical_lastchild_top_position = $(this).children('p:last-child').offset().top;
var vertical_lastchild_bottom_position = lastchild_height + vertical_lastchild_top_position;
var real_height = vertical_lastchild_bottom_position - vertical_div_top_position;
if (real_height > div_height){
//overflow div
}
यह jQuery का समाधान है जो मेरे लिए काम करता है। offsetWidthआदि ने काम नहीं किया।
function is_overflowing(element, extra_width) {
return element.position().left + element.width() + extra_width > element.parent().width();
}
यदि यह काम नहीं करता है, तो सुनिश्चित करें कि तत्वों के माता-पिता की वांछित चौड़ाई है (व्यक्तिगत रूप से, मुझे इसका उपयोग करना था parent().parent())। positionमाता-पिता के सापेक्ष। मैंने भी शामिल किया है extra_widthक्योंकि मेरे तत्वों ("टैग") में छवियां शामिल हैं, जो छोटे समय के लिए लेती हैं लोड, लेकिन फ़ंक्शन कॉल के दौरान उनके पास शून्य चौड़ाई है, गणना को खराब कर रहा है। उस चारों ओर जाने के लिए, मैं निम्नलिखित कॉलिंग कोड का उपयोग करता हूं:
var extra_width = 0;
$(".tag:visible").each(function() {
if (!$(this).find("img:visible").width()) {
// tag image might not be visible at this point,
// so we add its future width to the overflow calculation
// the goal is to hide tags that do not fit one line
extra_width += 28;
}
if (is_overflowing($(this), extra_width)) {
$(this).hide();
}
});
उम्मीद है की यह मदद करेगा।
मैंने यह तय किया कि ओवरफ्लो में एक और div जोड़कर। फिर आप 2 डिवो की ऊंचाइयों की तुलना करते हैं।
<div class="AAAA overflow-hidden" style="height: 20px;" >
<div class="BBBB" >
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
</div>
</div>
और जे.एस.
if ($('.AAAA').height() < $('.BBBB').height()) {
console.log('we have overflow')
} else {
console.log('NO overflow')
}
यह आसान लग रहा है ...