JQuery সহ সিএসএস সম্পত্তির কেবল সংখ্যার অংশটি কীভাবে পাবেন?


158

সিএসএস বৈশিষ্ট্যের উপর ভিত্তি করে আমার একটি সংখ্যার গণনা করা দরকার। তবে, যখন আমি তথ্যটি ব্যবহার করতে এটি ব্যবহার করি:

$(this).css('marginBottom')

এটি '10px' মান প্রদান করে। শুধু মান সংখ্যা অংশ পেয়ে একটি কৌতুক কোন ব্যাপার কিনা এটা হয় pxবা %বা emবা যাই হোক না কেন?

উত্তর:


163

এটি স্ট্রিং থেকে সমস্ত অ-অঙ্ক, অ-বিন্দু এবং বিয়োগ-চিহ্নটি পরিষ্কার করবে:

$(this).css('marginBottom').replace(/[^-\d\.]/g, '');

নেতিবাচক মানগুলির জন্য আপডেট করা


4
আপনি উত্তেজনাপূর্ণ সংখ্যার সাথে কাজ করছেন না এটি প্রদান দুর্দান্ত great আমি কোনও রেইজেক্স গুরু তাই আরও ভাল নমুনা সরবরাহ করতে পারি না :)
গ্যারি

39
পার্সফ্লোট ব্যবহার করা বিবেচনা করুন যা ভাসমান পয়েন্ট সংখ্যাগুলিতে অনুমোদিত সমস্ত অক্ষর পরিচালনা করে এবং একটি স্ট্রিংয়ের পরিবর্তে একটি সংখ্যাও দেয় - ম্যাক্সিম্লেব্রিটনের উত্তর দেখুন
অলিভার

6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয় কারণ এটি প্রশ্নের সঠিক উত্তর দেয় না। পার্সফ্লোয়েট / পার্সেন্ট সমাধানগুলি আরও ভাল। সংখ্যাটি গণনার ক্ষেত্রে প্রশ্নটি জিজ্ঞাসা করে । এই উত্তরটি একটি স্ট্রিং দেয়। এর অর্থ হল "20" + 20 = "2020" যা জড়িত কারও পক্ষে ভাল নয় not
মাস্তাব্লাস্টা

@ জাকোভিরিয়া আপনি ব্যবহৃত RegExp/[^-\d\.]/g
আলেকজান্ডার

1
@ ক্যালেন্ট সহ আলেকজান্দার স্কয়ার বন্ধনীর অর্থ নয়: [^ <আপনি এখানে যা কিছু রেখেছেন]]। এই রেজেক্সে এটি কোনও চিহ্নের সাথে মেলে যা বিয়োগ চিহ্ন, অঙ্ক বা বিন্দু নয়। মূলত সংখ্যার অংশ হতে পারে না এমন সমস্ত কিছু মুছে ফেলে
zakovyrya

284
parseInt($(this).css('marginBottom'), 10);

parseInt স্বয়ংক্রিয়ভাবে ইউনিট উপেক্ষা করবে।

উদাহরণ স্বরূপ:

var marginBottom = "10px";
marginBottom = parseInt(marginBottom, 10);
alert(marginBottom); // alerts: 10

1
আমি হোঁচট খেয়েছি এমন সমস্ত ক্ষেত্রে এটি খুব ভালভাবে কাজ করছে বলে মনে হয় এবং আমি এটি কোনও রেজিপ্লেক্স সমাধানের চেয়ে অনেক বেশি পঠনযোগ্য বলে মনে করি।
মার্কাস অমলথিয়া ম্যাগনসন

3
আপনি যদি এই সমাধানটি ব্যবহার করে থাকেন তবে আপনি পার্সে র‌্যাডিক্স (10) যুক্ত করতে চাইতে পারেন।
আসওলিয়ামস

47
ম্যাক্সিম্লেব্রেটনের উত্তরে যেমন আপনি অ-পূর্ণসংখ্যার মানটি পান সে ক্ষেত্রে দায়বদ্ধ হওয়ার পরিবর্তে আপনি পার্সফ্লোট ব্যবহার করতে চাইতে পারেন । parseInt
অলিভার

3
আসলে, পার্সইন্টের ", 10" রেডিক্স প্যারামিটারের প্রয়োজন নেই, যেহেতু 10 ডিফল্ট। কম প্যারামগুলি = আরও ভাল পঠনযোগ্যতা, সংক্ষিপ্ত কোড, কম বাগ।
পয়েন্টার নুল

2
10 কেবলমাত্র পার্সেইন্টের জন্য ডিফল্ট হয় যদি সংখ্যাটি অষ্টাল হিসাবে ব্যাখ্যা করা যায় না (উদাহরণস্বরূপ '0700' 700 এর পরিবর্তে 448 হিসাবে পার্স করবে, যা সম্ভবত পছন্দসই)।
রবার্ট সি বার্থ

122

প্রতিস্থাপন পদ্ধতির সাথে, আপনার সিএসএস মানটি একটি স্ট্রিং, এবং কোনও সংখ্যা নয়।

এই পদ্ধতিটি আরও পরিষ্কার, সহজ এবং একটি নম্বর প্রদান করে:

parseFloat($(this).css('marginBottom'));

2
এটিই সেরা সমাধান, যেহেতু ওপি সম্ভাব্য নন-পূর্ণসংখ্যা ইউনিটগুলির জন্য জিজ্ঞাসা করছে ( %, em)
আন্দ্রে ফিগুয়েরেডো

14
parseFloat($(this).css('marginBottom'))

এমনকি মার্জিনবটম এম-তে সংজ্ঞায়িত হলেও, উপরের পার্সফ্লোটের অভ্যন্তরের মান পিক্সে হবে, কারণ এটি একটি গণনা করা সিএসএস সম্পত্তি।


3
পার্সফ্লোয়েটের একটি মাত্র যুক্তি রয়েছে - আপনি এখানে সরবরাহ করেছেন মূলা (10) উপেক্ষা করা হবে। সুতরাং আরও সঠিক উত্তরটি হবে ম্যাক্সিম্লেব্রেটনের
অলিভার

এটি কি পার্সফ্লোট ($ (এটি) .সিএসএস ('মার্জিনবটম'), 10) হওয়া দরকার
ব্যবহারকারী1736947

9
$(this).css('marginBottom').replace('px','')

2
এটি কেবল 'px' কেস পরিচালনা করতে পারে। সুতরাং আমি অনুমান করি বাকি প্রতিটি প্রত্যয়গুলির জন্য আলাদা প্রতিস্থাপন করা উচিত।
গ্রেজগোর্জ ওলেডজকি

3
সাবধানতা অবলম্বন করুন - অন্যান্য প্রত্যয়গুলি পিক্সেলগুলিতে নেই, তাই আপনি যদি আশা করেন pxতবে দেওয়া হয় তবে emআপনাকে রূপান্তর করতে হবে।
এরিয়েল

এটাই আমি ভাবছিলাম - এর জন্য কি কোনও লাইব্রেরির রুটিন আছে? আমি যেমন মনে করি পিএক্স আশা করা বেশ যুক্তিসঙ্গত শর্ত, তবে দৃ rob়তার উদ্দেশ্যে আমাদের বিকল্পগুলি কী ...? (জাস্ট অনুধ্যান, এখানে - আমি যেহেতু আমি মান নিয়ন্ত্রণ অত্যধিক এটা দিয়ে বিরক্ত করার জন্য যাচ্ছি না)
তোমার

5

আমি কোনও একক সিএসএস সম্পত্তির সংখ্যাসূচক মানটি ফিরিয়ে দিতে একটি সহজ jQuery প্লাগইন ব্যবহার করি।

এটি parseFloatjQuery এর ডিফল্ট cssপদ্ধতিতে ফিরে আসা মানের ক্ষেত্রে প্রযোজ্য ।

প্লাগিন সংজ্ঞা:

$.fn.cssNum = function(){
  return parseFloat($.fn.css.apply(this,arguments));
}

ব্যবহার:

var element = $('.selector-class');
var numericWidth = element.cssNum('width') * 10 + 'px';
element.css('width', numericWidth);

5

আমাদের ধরে নেওয়া যাক আপনার একটি মার্জিন-নীচের সম্পত্তি 20px / 20% / 20 ম এ সেট করা আছে। একটি সংখ্যা হিসাবে মান পেতে দুটি বিকল্প রয়েছে:

বিকল্প 1:

parseInt($('#some_DOM_element_ID').css('margin-bottom'), 10);

ParseInt () ফাংশন একটি স্ট্রিংকে পার্স করে এবং পূর্ণসংখ্যা ফেরত দেয়। উপরের ফাংশনে পাওয়া 10 টি পরিবর্তন করবেন না ("রেডিক্স" হিসাবে পরিচিত) আপনি কী করছেন তা না জানলে।

উদাহরণ আউটপুটটি হবে:% (এবং যদি px এ মার্জিন-নীচে সেট থাকে) তবে এটি বর্তমান পিতামণ্ডল / ফন্টের আকারের ভিত্তিতে আপেক্ষিক সংখ্যাটি আউটপুট দেবে।

বিকল্প 2 (আমি ব্যক্তিগতভাবে এই বিকল্পটি পছন্দ করি)

parseFloat($('#some_DOM_element_ID').css('margin-bottom'));

উদাহরণ আউটপুটটি হবে:% (এবং যদি px এ মার্জিন-নীচে সেট থাকে) তবে এটি বর্তমান পিতামণ্ডল / ফন্টের আকারের ভিত্তিতে আপেক্ষিক সংখ্যাটি আউটপুট দেবে।

পার্সফ্লোট () ফাংশন একটি স্ট্রিংকে বিশ্লেষণ করে এবং একটি ভাসমান পয়েন্ট নম্বর দেয়।

পার্সফ্লোট () ফাংশন নির্ধারণ করে যে নির্দিষ্ট স্ট্রিংয়ের প্রথম অক্ষরটি একটি সংখ্যা is যদি এটি হয় তবে এটি সংখ্যার শেষ না হওয়া পর্যন্ত স্ট্রিংটিকে পার্স করে এবং সংখ্যাটি স্ট্রিং হিসাবে নয়, সংখ্যার হিসাবে ফেরত দেয়।

বিকল্প 2 এর সুবিধাটি হ'ল যদি আপনি দশমিক সংখ্যা ফিরে পেয়ে থাকেন (যেমন 20.32322px) তবে দশমিক পয়েন্টের পিছনে থাকা মানগুলি দিয়ে আপনি ফিরে আসবেন। আপনার যদি নির্দিষ্ট নম্বরগুলি প্রত্যাবর্তনের প্রয়োজন হয় তবে দরকারী, উদাহরণস্বরূপ যদি আপনার মার্জিন-নীচে এম বা % তে সেট করা থাকে


4

parseintযে কোনও দশমিক মান কেটে যাবে (যেমন 1.5emদেয় 1)।

replaceরেগেক্স যেমন একটি ফাংশন চেষ্টা করুন

$this.css('marginBottom').replace(/([\d.]+)(px|pt|em|%)/,'$1');

4

আইডি যান:

Math.abs(parseFloat($(this).css("property")));

জেনেরিক সমাধান নয়। বেশিরভাগ ক্ষেত্রে, আমি মনে করি, আমি marginএটি নেতিবাচক বা ইতিবাচক কিনা তা জানতে চাইব !
আন্দ্রে ফিগুয়েরডো

3

ইউনিট ছাড়াই উপাদানের প্রস্থ পাওয়ার সহজতম উপায় হ'ল:

target.width()

সূত্র: https://api.jquery.com/width/#width2


প্রস্থ এবং উচ্চতার জন্য দুর্দান্ত। $ (নির্বাচক)। প্রস্থ () এবং $ (নির্বাচক)। উচ্চতা () প্রকৃতপক্ষে সংখ্যা। অন্যান্য সিএসএস প্রপসের জন্য কার্যকর নয়: মার্জিন, প্যাডিং।
EON

3

আপনি এই খুব সহজ jQuery প্লাগইন বাস্তবায়ন করতে পারেন :

প্লাগিন সংজ্ঞা:

(function($) {
   $.fn.cssValue = function(p) {
      var result;
      return isNaN(result = parseFloat(this.css(p))) ? 0 : result;
   };
})(jQuery);

এটি NaNপুরানো আই সংস্করণে ঘটতে পারে এমন মানগুলির সাথে প্রতিরোধী ( 0পরিবর্তে ফিরে আসবে )

ব্যবহার:

$(this).cssValue('marginBottom');

উপভোগ করুন! :)


1
এটি একটি ভাল ধারণা, তবে অজানা খরচের কোনও ক্রিয়াকলাপকে প্রয়োজনের চেয়ে বেশি কল করার মতো পার্শ্ব প্রতিক্রিয়াগুলি লক্ষ্য করা মনে রাখবেন। var result; return isNaN(result = parseFloat(this.css(p))) ? 0 : result;
নিকোল

2

গৃহীত উত্তরের উন্নতির জন্য এটি ব্যবহার করুন:

Number($(this).css('marginBottom').replace(/[^-\d\.]/g, ''));

2

যদি এটি কেবল "px" এর জন্য হয় তবে আপনি এটি ব্যবহার করতে পারেন:

$(this).css('marginBottom').slice(0, -2);

0

দশমিক দশক সংরক্ষণের সময় ইউনিটগুলি সরানো উচিত।

var regExp = new RegExp("[a-z][A-Z]","g");
parseFloat($(this).css("property").replace(regExp, ""));

-1

ব্যবহার

$(this).cssUnit('marginBottom');

যা একটি অ্যারের ফিরিয়ে দেয়। প্রথম সূচক মার্জিন নীচের মান ( 20px এর জন্য উদাহরণ 20 ) এবং দ্বিতীয় সূচকটি মার্জিন নীচের ইউনিট প্রদান করে (উদাহরণস্বরূপ px 20px)


1
cssUnit আসলে jQueryUI এর একটি অংশ, jQuery নয়।
cvkline
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.