.Width () দ্বারা প্রদত্ত গোল মান না করে jQuery কীভাবে করবেন?


94

আমি চারপাশে অনুসন্ধান করেছি এবং এটি খুঁজে পাইনি। আমি একটি ডিভের প্রস্থ অর্জন করার চেষ্টা করছি, তবে এর দশমিক বিন্দু থাকলে এটি সংখ্যাটি গোল করে।

উদাহরণ:

#container{
    background: blue;
    width: 543.5px;
    height: 20px;
    margin: 0;
    padding: 0;
}

আমি যদি $('#container').width();এটি করি তবে 543.5 এর পরিবর্তে 543 ফিরে আসবে। আমি কীভাবে এটির সংখ্যাটি গোল না করে পুরো 543.5 (বা এটি যে সংখ্যা হ'ল) ​​ফিরিয়ে দেব।


4
দশমিক পিক্সেল প্রস্থ আপনি কেন রাখছেন? তারা যাইহোক পুরো সংখ্যায় গোল হয়। আপনার অর্ধ পিক্সেল থাকতে পারে না।
জামান

আপনার এটার দরকার কেন? তথ্য ছাড়া এই প্রশ্নটি অর্থহীন।
জুয়ান মেন্ডেস

4
@ জুয়ানমেন্ডেস আমার ক্ষেত্রে, হাইডিপিআই প্রদর্শনে, ক্রোম 38 একটি অ-পূর্ণসংখ্যার উইন্ডো প্রস্থকে গণনা করে। সুতরাং, যদি $। প্রস্থটি আরও বেশি হয়, 1250.6 থেকে 1251 বলুন এবং আমি 1251 এর উপর ভিত্তি করে গণনা করি তবে আমার সমস্যা আছে have বৃত্তাকার ডাউন কোনও ইস্যুর মতো নয়।
জে.কে.এস.

উত্তর:


197

Element.getBoundingClientRectউপাদানটির শৈলীর চেয়ে নেটিভ ব্যবহার করুন । এটি আই 4 তে চালু হয়েছিল এবং এটি সমস্ত ব্রাউজার দ্বারা সমর্থিত:

$("#container")[0].getBoundingClientRect().width

দ্রষ্টব্য: আইই 8 এবং এর জন্য , এমডিএন ডক্সে "ব্রাউজারের সামঞ্জস্য" নোটগুলি দেখুন


9
+1 আপনি যদি অন্য উপাদানের প্রস্থ নির্ধারণ করছেন তবে এর প্রস্থটি এভাবে পরিবর্তন করতে ভুলবেন না: $ ("# অন্যান্য")। CSS ("প্রস্থ", $ ('# ধারক')। (0) .getBoundingClientRect ( )। প্রস্থ + "পিএক্স"); আপনি jQuery প্রস্থ () ব্যবহার করলে মানটি গোল হয়।
Lepe

4
এই একই প্রশ্ন মতে widthএবং heightবৈশিষ্ট্যাবলী ইন্টারনেট এর সব সংস্করণ সমর্থিত হয় না, তাই কিছু কিছু ক্ষেত্রে তারা আগে তারা ব্যবহার করা যেতে পারে গণনা করা প্রয়োজন: stackoverflow.com/questions/11907514/...
flyingL123

চমৎকার! বহির্মুখের জন্য একই প্রশ্ন (সত্য)? :) ছোট মন্তব্য: IE আইই 8 এবং এর নীচে, ডোমরেক্ট বস্তুটি getBoundingClientRect () দ্বারা ফিরে এসেছে (উচ্চতা এবং প্রস্থের গুণাবলীর অভাব রয়েছে)। এছাড়াও, অতিরিক্ত বৈশিষ্ট্যগুলি (উচ্চতা এবং প্রস্থ সহ) এই ডমরেক্ট বস্তুগুলিতে যুক্ত করা যাবে না `
টেকহান্টার

5
নোট করুন যে সিএসএস রূপান্তর প্রয়োগের পরেgetBoundingClientRect() মাত্রাগুলি গণনা করে ।
ব্যবহারকারী 1620220

পরীক্ষার পরে আমি দেখতে পেলাম যে এই পদ্ধতিটি লুকানো উপাদানগুলির জন্য কাজ করে না ( display: none)।
জ্যোরি হোগভিন

10

রস অ্যালেনের উত্তর একটি ভাল সূচনা পয়েন্ট তবে getBoundingClientRect () ব্যবহার করে প্রস্থে প্যাডিং এবং সীমানা প্রস্থও অন্তর্ভুক্ত থাকবে যা জ্যাকুইয়ের প্রস্থের কাজ নয় :

প্রত্যাবর্তিত পাঠ্য আয়তক্ষেত্র অবজেক্টে প্যাডিং, স্ক্রোলবার এবং সীমানা অন্তর্ভুক্ত থাকে তবে মার্জিনটি বাদ দেয়। ইন্টারনেট এক্সপ্লোরারে, সীমাবদ্ধ আয়তক্ষেত্রের স্থানাঙ্কগুলিতে ক্লায়েন্ট ক্ষেত্রের উপরের এবং বাম সীমানা অন্তর্ভুক্ত থাকে।

যদি আপনার উদ্দেশ্যটি widthনির্ভুলতার সাথে মানটি পেতে হয় তবে আপনাকে প্যাডিং এবং সীমানাটি এভাবে মুছে ফেলতে হবে:

var a = $("#container");
var width = a[0].getBoundingClientRect().width;

//Remove the padding width (assumming padding are px values)
width -= (parseInt(a.css("padding-left")) + parseInt(a.css("padding-right")));

//Remove the border width
width -= (a.outerWidth(false) - a.innerWidth());

আপনি করা উচিত নয় .replace("px", "")যেমন parseIntআপনার জন্য সরাতে হবে।
স্টিভ শ্রাব

এই প্রশ্নটি রাউন্ডিং প্রতিরোধ সম্পর্কে সর্বদা, আমি এখানে স্পষ্ট ধারণা দ্বারা বিভ্রান্ত হয়েছি যে প্যাডিং মানগুলির জন্য গোল করা ঠিক আছে fine আপনি কেন এর প্রস্থের মানগুলির সাথে আলাদাভাবে আচরণ করবেন?! parseFloat()সম্ভবত ব্যবহার করবেন ?
ফিল্ডস 9:14 'এ 5 ই

একইভাবে, innerWidth()মূল সমস্যার অংশ হওয়ার সাথে সাথে আমি আশঙ্কা করি যে এখানে সীমানা প্রস্থের গণনাটিও বৃত্তাকার মানগুলিতে কাজ করছে।
ফিল্ডস

9

এখানে আমার অভিজ্ঞতাটি যুক্ত করতে চেয়েছিলেন, যদিও প্রশ্নের পুরাতন: উপরের sensকমত্যটি মনে হয়েছে যে জিকুয়েরির গোলটি কার্যকরভাবে একটি সীমাহীন গণনার মতো কার্যকর - তবে আমি যে কাজটি করেছি তার ক্ষেত্রে তেমনটি মনে হয় না doesn't ।

আমার উপাদানটির তরল প্রস্থ থাকে, সাধারণত, তবে এজেএক্সের মাধ্যমে গতিময় পরিবর্তিত সামগ্রী। সামগ্রীটি স্যুইচ করার আগে আমি অস্থায়ীভাবে উপাদানটির মাত্রাগুলি লক করে রাখি যাতে আমার লেআউটটি সংক্রমণের সময় চারদিকে না ounce আমি দেখতে পেয়েছি যে এই জাতীয় jQuery ব্যবহার করে:

$element.width($element.width());

কিছু মজাদারতা সৃষ্টি করছে, যেমন প্রকৃত প্রস্থ এবং গণনা করা প্রস্থের মধ্যে সাব-পিক্সেল পার্থক্য রয়েছে। (বিশেষত, আমি পাঠ্যের এক লাইন থেকে অন্য রেখায় একটি শব্দ লাফ দেখতে পাব, প্রস্থটি কেবলমাত্র লক করা হয়নি বলে নির্দেশ করে)) অন্য একটি প্রশ্ন থেকে - একটি উপাদানটির আসল, ভাসমান-বিন্দুর প্রস্থ পাওয়া - আমি পেয়েছি এটি window.getComputedStyle(element).widthএকটি নিরবচ্ছিন্ন গণনা ফিরিয়ে দেবে। তাই আমি উপরের কোডটি এমন কিছুতে পরিবর্তন করেছি

var e = document.getElementById('element');
$('#element').width(window.getComputedStyle(e).width);

এবং সেই কোড সহ - কোনও মজার বাউন্সিং নেই! এই অভিজ্ঞতাটি মনে হয় যে সীমাহীন মানটি ব্রাউজারের সাথে আসলেই আসে না, তাই না? (আমার ক্ষেত্রে, ক্রোম সংস্করণ 26.0.1410.65)


JQuery এর .css () এর জন্য বর্তমান দস্তাবেজটি নির্দেশ করে যে getComputesStyle () কে রানটাইমস্টাইল () আই আই বলা হয় এবং .css () এর একটি সুবিধা দাবি করে যা এই ইউনিফাইড ইন্টারফেস।
নরওয়েবীয়


-1

সঠিক প্রস্থ পেতে নিম্নলিখিতটি ব্যবহার করুন:

var htmlElement=$('class or id');
var temp=htmlElement[0].style.width;

আপনি প্রকৃতপক্ষে সেট করে style.width
রাখেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.