jQuery এ সিএসএস নিয়মের শতাংশের মান পান


99

নিয়মটি নিম্নরূপ বলা যাক:

.largeField {
    width: 65%;
}

কোনওভাবে '65% 'ফিরে পাওয়ার কোনও উপায় আছে, এবং পিক্সেলের মানটি নয়?

ধন্যবাদ

সম্পাদনা করুন: দুর্ভাগ্যবশত করে DOM পদ্ধতি ব্যবহার করে আমার ক্ষেত্রে অবিশ্বস্ত হিসাবে আমি একটি স্টাইলশীট যা আমদানির অন্যান্য স্টাইলশীট আছে, এবং এর ফলে cssRules পারেন সঙ্গে শেষ পর্যন্ত প্যারামিটার নাল বা অনির্ধারিত মান।

এই পদ্ধতির ক্ষেত্রে, বেশিরভাগ সোজা ক্ষেত্রে (একটি স্টাইলশিট, নথির প্রধান ট্যাগের অভ্যন্তরে একাধিক পৃথক স্টাইলশিট ঘোষণা ) কাজ করবে।


4
এই ডেটাটি নিজেই উপাদানটিতে বীজ দেওয়া ভাল এবং তারপরে ভবিষ্যতে এটি কীভাবে পরিবর্তিত হয় তা সন্ধান করা ভাল।
ট্র্যাভিস জে

উত্তর:


51

কোনও অন্তর্নির্মিত উপায় নেই, আমি ভয় করি। আপনি এর মতো কিছু করতে পারেন:

var width = ( 100 * parseFloat($('.largeField').css('width')) / parseFloat($('.largeField').parent().css('width')) ) + '%';

19
কেবল স্পষ্ট করে বলার জন্য, এটি আপনাকে আপনার স্টাইলের মানটি বলে না, এটি আপনাকে একটি গণিত মান দেয়
অ্যান্থনি জনস্টন

4
@ শেভস্কি এটি দুর্দান্তভাবে কাজ করে, আপনার class="largeField"স্প্যানটি যোগ করতে হবে, বর্তমানে আপনি একটি খালি সেট নির্বাচন করছেন।
অ্যাডাম লাসেক

আমি জানি এটিতে কী কাজ করছে না এবং সে কারণেই এটি একটি পাল্টা উদাহরণ।
শেভস্কি

4
@ শেভস্কি আমার উদাহরণটি পৃষ্ঠাতে বিদ্যমান উপাদানগুলির একটি গণিত মান দেয়, যেমনটি অ্যান্টনি ইতিমধ্যে এক বছর আগে নির্দেশ করেছিলেন। আপনার মন্তব্যগুলি অতিরিক্ত অতিরিক্ত f
অ্যাডাম লাসেক

অ্যাডলাসেক, অ্যান্টনি এটি সর্বাধিক বিদ্যমান বলে দেয়নি।
শেভস্কি

116

সর্বাধিক সহজ উপায়

$('.largeField')[0].style.width

// >>> "65%"

51
কেবলমাত্র একটি দ্রষ্টব্য: এটি কেবলমাত্র উপাদানটিতে সিএসএস প্রয়োগ করে কাজ করবে (উদাঃ style="width:65%")।
brianreavis

4
দুর্দান্ত !! কেবল সংখ্যাগুলি ফিরিয়ে আনার জন্য: পার্সেন্ট ($ ('। বৃহত ফিল্ড') [0]। স্টাইল.উইথ, 10);
টিয়াগো

4
টিয়াগো, আপনি কেবল পার্সফ্লোট () ব্যবহার করতে পারেন।
গ্যাভিন

@ ব্রায়ানারিভিস যেমন বলেছিলেন এটি কেবল ইনলাইন স্টাইলিংয়ে কাজ করে।
আকানশ

84

এটি খুব সম্ভবত সম্ভব!

আপনাকে অবশ্যই প্রথমে প্যারেন্ট উপাদানটি লুকিয়ে রাখতে হবে। এটি জাভাস্ক্রিপ্টটিকে শিশু উপাদানটির জন্য পিক্সেল গণনা করা থেকে বিরত রাখবে।

$('.parent').hide();
var width = $('.child').width();
$('.parent').show();
alert(width);

আমার উদাহরণ দেখুন ।

এখন ... আমি ভাবছি আমি যদি এই হ্যাকটি প্রথম আবিষ্কার করি তবে :)

হালনাগাদ:

এক রৈখিক

element.clone().appendTo('body').wrap('<div style="display: none"></div>').css('width');

এটি </body>ট্যাগের আগে একটি গোপন উপাদান রেখে যাবে যা আপনি চাইতে পারেন .remove()

ওয়ান-লাইনারের উদাহরণ দেখুন ।

আমি আরও ভাল ধারণা খোলা!


4
এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। আমি নিশ্চিত করতে পারি যে এটি আমার জন্য কাজ করে যেখানে অন্যান্য উত্তরগুলি মূলত নির্ধারিত শতাংশের মান পায় না।
এরিকপ

4
ঝাঁকুনি এড়াতে, বাচ্চাকে ক্লোন করুন, পিতামাতাকে লুকিয়ে রাখুন, তারপরে প্রস্থটি পুনরুদ্ধার করুন। var ক্লোন = $ ('। শিশু')। ক্লোন ();
ব্যবহারকারী 1491819

4
আপডেট: ফাংশন getCssWidth (চাইল্ডলেক্টর) {রিটার্ন jQuery (চাইল্ডলেক্টর)। পিতামাতা ()। ক্লোন ()। লুকান ()। সন্ধান করুন (চাইল্ডলেক্টর) .উইথ (); so কনসোল.লগ ('সন্তানের প্রস্থ:' + getCssWidth ('। শিশু')) ;;
ব্যবহারকারী 1491819

4
অসাধারণ সমাধান! এখানে jsfiddle.net/Sjeiti/2qkftdjd
সিজেটি

4
যদি $ (...) [0] .style.width উত্তরটি কাজ করে, তবে তা কি গ্রহণযোগ্য সমাধান হওয়া উচিত নয়? এই সমাধানটি মার্জিত হলেও কিছু পারফরম্যান্সের ত্রুটি থেকে ভুগছে।
মিহাই ড্যানিলা

45

আপনি document.styleSheetsবস্তু অ্যাক্সেস করতে পারে :

<style type="text/css">
    .largeField {
        width: 65%;
    }
</style>
<script type="text/javascript">
    var rules = document.styleSheets[0].rules || document.styleSheets[0].cssRules;
    for (var i=0; i < rules.length; i++) {
        var rule = rules[i];
        if (rule.selectorText.toLowerCase() == ".largefield") {
            alert(rule.style.getPropertyValue("width"));
        }
    }
</script>


4
নির্ভুলতার জন্য আমি এখানে আপনার সাথে আছি। প্রতিটি ব্রাউজার কীভাবে এটি সরবরাহ করে তা সম্পর্কে আমি আগ্রহী, তবে এটি সঠিক উত্তর।
সিজিপি

এফএফ এবং আই 7 উভয়ই সহজ ক্ষেত্রে ভাল কাজ করে তবে আমার পক্ষে নয় (উপরে EDIT দেখুন)।
মনট্রিলিস্ট 19

4
আপনি কি সব স্টাইলশিট দিয়ে চালানোর চেষ্টা করেছেন? আমার উদাহরণটি সবেমাত্র প্রথম ( styleSheets[0]) ব্যবহার করেছে ।
গম্বো

দুঃখিত যদি এটি একটি নূন্য প্রশ্ন, তবে কীভাবে for (var i=0; rules.length; i++)কাজ করবে? এটি হওয়া উচিত নয়for (var i=0; i<rules.length; i++)
এসবিচেনকো

18

দেরীতে, তবে নতুন ব্যবহারকারীদের জন্য, সিএসএস স্টাইলে যদি শতকরা এক ভাগ থাকে তবে এটি ব্যবহার করে দেখুন :

$element.prop('style')['width'];

সিএসএস ফন্ট-আকারের জন্য কবজির মতো কাজ করেছেন। $ উপাদান.প্রপ ('স্টাইল') ['হরফ-আকার];
জেসন

10

অ্যাডামসের উত্তরের উপর ভিত্তি করে একটি jQuery প্লাগইন:

(function ($) {

    $.fn.getWidthInPercent = function () {
        var width = parseFloat($(this).css('width'))/parseFloat($(this).parent().css('width'));
        return Math.round(100*width)+'%';
    };

})(jQuery);

$('body').html($('.largeField').getWidthInPercent());​​​​​

'65% 'ফেরত আসবে। যদি আপনি (প্রস্থ == '65%') পছন্দ করেন তবে কেবল আরও ভাল কাজ করার জন্য গোলাকার সংখ্যাগুলি দেয় returns আপনি যদি অ্যাডামসের উত্তরটি সরাসরি ব্যবহার করতে পারতেন তবে তা কার্যকর হয়নি (আমি 64.93288590604027 এর মতো কিছু পেয়েছি)। :)


3

টিমোফিয়ার দুর্দান্ত এবং অবাক করা সমাধানের ভিত্তিতে বিল্ডিং, এখানে একটি খাঁটি জাভাস্ক্রিপ্ট বাস্তবায়ন রয়েছে:

function cssDimensions(element)
  var cn = element.cloneNode();
  var div = document.createElement('div');
  div.appendChild(cn);
  div.style.display = 'none';
  document.body.appendChild(div);
  var cs = window.getComputedStyle
    ? getComputedStyle(cn, null)
    : cn.currentStyle;
  var ret = { width: cs.width, height: cs.height };
  document.body.removeChild(div);
  return ret;
}

আশা করি এটি কারওর পক্ষে সহায়ক।


একটি সিনট্যাক্স ত্রুটি, আপনি {প্রথম লাইনের শেষে ভুলে গেছেন ।
আকানশ

কেবলমাত্র এই সমাধানটি সঠিকভাবে 'অটো' দেখায় যখন ডিভের প্রস্থ সেট না করা হয়, jquery CSS ('প্রস্থ') '0px' ফেরত দেয়। অন্য সমস্ত উত্তর ভুল ...
আলেক্সি ওবুখভ

1

JQuery এ গ্লোবাল স্টাইলশীটের মান অর্জনে আমার একই রকম সমস্যা রয়েছে , শেষ পর্যন্ত আমি উপরের মত একই সমাধান নিয়ে এসেছি ।

কেবল দুটি প্রশ্নের ক্রসলিংক করতে চেয়েছিলেন যাতে অন্যরা পরবর্তী ফলাফলগুলি থেকে উপকৃত হয়।


4
আপনার প্রশ্নে শেসেকের মন্তব্যে আপনার প্রশ্ন এবং এটি ইতিমধ্যে লিঙ্কযুক্ত (ডানদিকে "লিঙ্কযুক্ত" সাইডবারটি দেখুন)।
ক্রিস জনসেন

1

পিক্সেল থেকে শতাংশে রূপান্তর করুন ক্রস গুণকে ব্যবহার করে

সূত্র সেটআপ:

১) (এলিমেন্ট_উইথ_পিক্সেল / প্যারেন্ট_উইথ_পিক্সেল) = (এলিমেন্ট_উইথ_পারসেন্টেজ / 100)

২) উপাদান_দ্বীপ_পরিবেদী = (100 * উপাদান_ প্রস্থ_পিক্সেল) / পিতামাতা_পরিচয়_পিক্সেল

আসল কোড:

<script>

   var $width_percentage = (100 * $("#child").width()) / $("#parent").width();

</script>

0

আপনি jQuery এর সাথে অ্যাক্সেস করার জন্য প্রয়োজনীয় স্টাইলগুলি এতে অন্তর্ভুক্ত করতে পারেন:

  1. সরাসরি নথির প্রধান
  2. একটি অন্তর্ভুক্ত, যা সার্ভার সাইড স্ক্রিপ্ট তারপর মাথায় রাখে

তারপরে ডকুমেন্টের শিরোনামে স্টাইল ট্যাগের মধ্যে থাকা সমস্ত কিছু পার্স করার জন্য একটি জেএস ফাংশন লিখতে এবং আপনার প্রয়োজনীয় মানটি ফিরিয়ে আনা সম্ভব হবে (যদিও প্রয়োজনীয়ভাবে সহজ নয়)।


0

JQuery তে কিছুই নেই, এমনকি জাভাস্ক্রিপ্টে সোজা কিছুই নেই। টিমোফয়ের উত্তর নিয়ে এবং এটির সাথে চলতে, আমি এই ফাংশনটি তৈরি করেছি যা আপনার পছন্দসই কোনও সম্পত্তি পেতে কাজ করে:

// gets the style property as rendered via any means (style sheets, inline, etc) but does *not* compute values
// domNode - the node to get properties for 
// properties - Can be a single property to fetch or an array of properties to fetch
function getFinalStyle(domNode, properties) {
    if(!(properties instanceof Array)) properties = [properties]

    var parent = domNode.parentNode
    if(parent) {
        var originalDisplay = parent.style.display
        parent.style.display = 'none'
    }
    var computedStyles = getComputedStyle(domNode)

    var result = {}
    properties.forEach(function(prop) {
        result[prop] = computedStyles[prop]
    })

    if(parent) {
        parent.style.display = originalDisplay
    }

    return result
}

-1

আপনি উপাদানটির বর্তমান প্রস্থটি ফিরিয়ে দিতে CSS (প্রস্থ) ফাংশনটি ব্যবহার করতে পারেন।

অর্থাত্

var myWidth = $("#myElement").css("width");

আরও দেখুন: http://api.jquery.com/width/ http://api.jquery.com/css/


কেন এটি চিহ্নিত করা হয়েছে? এই একটি বাগ খোলা আছে bugs.jquery.com/ticket/4772 , সেখানে মত দেখাচ্ছে কিনা আপনি আপনার শৈলী ইনলাইন করা বা শৈলী পত্রক মধ্যে নির্ভর করে এই আহ্বান মধ্যে কিছু অসঙ্গতি রয়েছে jsfiddle.net/boushley/MSyqR/2
এন্থনি জনস্টন

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