আমি কোনও হাইফেন সহ জাভাস্ক্রিপ্ট অবজেক্ট সম্পত্তি কীভাবে উল্লেখ করব?


106

সমস্ত উত্তরাধিকারসূত্রে ইত্যাদির শৈলীর স্টাইল অবজেক্ট তৈরি করতে এই স্ক্রিপ্টটি ব্যবহার করে ।

var style = css($(this));
alert (style.width);
alert (style.text-align);

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


ড্যামন, অস্পষ্টতা এবং বিভ্রান্তিকে সম্বোধন করে (বিবিধ উত্তরগুলি এবং সংখ্যার সাথে যুক্ত হওয়া / সরানো ডাউনভোটগুলিও প্রতিফলিত হয় ...): আপনি কি নির্দিষ্টভাবে সিএসএস বৈশিষ্ট্যগুলি বোঝাতে চেয়েছিলেন, যেমন আপনার উদাহরণ দ্বারা ইঙ্গিতযুক্ত এবং বেশিরভাগ উত্তর, বা কোনও জেএস বৈশিষ্ট্য দ্বারা অনুমিত? , সাধারণভাবে, শিরোনাম এবং CSSট্যাগের অভাব দ্বারা নির্দেশিত ? [হ্যাঁ, আমি জানি 7 বছর কেটে গেছে। :)]
এসজেড

@Sz। আমার অর্থ হ'ল any js propertyকারণ যে হাইফেন ছিল এমন কোনও সম্পত্তি রেফারেন্স করার ক্ষেত্রে আমার একটি সমস্যা ছিল (এটি একটি CSS সম্পত্তি হিসাবেও ঘটেছিল ... আমি বুঝতে পারি নি যে আমি যা করার চেষ্টা করছিলাম তাতে আরও একটি সমস্যা ছিল)। সুতরাং এটি একটি অদ্ভুত এক যা শেষ করে 2 বিভিন্ন সমস্যা covering তবে আমি বলব শীর্ষ উত্তর দুটি বিষয়ই ব্যাখ্যা করে।
দামন

উত্তর:


154

সম্পাদনা

মন্তব্যগুলি দেখুন আপনি দেখতে পাবেন যে CSS বৈশিষ্ট্যগুলির জন্য কী স্বরলিপি বিভিন্ন সংখ্যার বৈশিষ্ট্যের সাথে সামঞ্জস্যপূর্ণ নয়। উটের কেসের কী স্বরলিপিটি ব্যবহার করা তাই বর্তমান উপায়

obj.style-attr // would become 

obj["styleAttr"]

বিন্দুর চেয়ে কী স্বরলিপি ব্যবহার করুন

style["text-align"]

জেএসের সমস্ত অ্যারেগুলি অবজেক্টস এবং সমস্ত অবজেক্টগুলি কেবল অ্যা্যাসোসিয়েটিভ অ্যারে হয়, এর অর্থ আপনি কোনও অ্যারেতে কোনও কীকে উল্লেখ করার মতো কোনও বস্তুর কোনও স্থানকে উল্লেখ করতে পারেন।

arr[0]

বা অবজেক্ট

obj["method"] == obj.method

বৈশিষ্ট্যগুলি অ্যাক্সেস করার সময় কয়েকটি জিনিস মনে রাখতে হবে

  1. সেগুলি মূল্যায়ন করা হয় সুতরাং আপনি যদি কাউন্টার দিয়ে কিছু না করে বা গতিশীল পদ্ধতির নাম ব্যবহার না করেন তবে স্ট্রিংগুলি ব্যবহার করুন।

    এর অর্থ হ'ল আপত্তি [পদ্ধতি] আপনাকে একটি অপরিজ্ঞাত ত্রুটি দেবে যখন আপত্তি ["পদ্ধতি"] না করবে

  2. আপনি যদি জেএস ভেরিয়েবলগুলিতে অনুমোদিত না এমন অক্ষর ব্যবহার করেন তবে আপনাকে অবশ্যই এই স্বরলিপিটি ব্যবহার করতে হবে।

এই রেজেক্সটি এটির যথেষ্ট পরিমাণে যোগ করে

[a-zA-Z_$][0-9a-zA-Z_$]*

1
কী স্বরলিপি এখানে প্রযোজ্য নয় - সিএসএস কীগুলিতে উটের ক্ষেত্রে ব্যবহার করে শৈলীর সংজ্ঞা দেয়: jsfiddle.net/49vkD
ব্রায়ান

কি ব্রাউজার? হাইফেনটি আমার জন্য ব্যর্থ হয় আই 7, আই 8, এফএফএক্স 3.5 এ। এবং, ব্যর্থতার অর্থ হ'ল উভয়ের জন্য "অপরিজ্ঞাত" প্রদর্শনগুলি ...
ব্রায়ান

@ ব্রায়ান সাফারি পরীক্ষিত এবং ক্রোম লাল, লাল, কেন্দ্র, কেন্দ্র প্রদর্শন করে। আমি এখন এফএফ-তে চেষ্টা করব
austinbv

@ ব্রায়ান আকর্ষণীয়, ফায়ার ফক্স 6 এ কাজ করেননি, আমি জানতাম না ... প্রতিদিন নতুন কিছু শিখি
অস্টিনবিভি

1
অন্য জন উত্তরদাতাকে সিএসএস সংগ্রহটি এইচটি প্রশ্নের মূল বিষয় বলে চিহ্নিত করার সাথে সাথে আমার ডাউনভোটটি সরানো হয়েছে, তবে আসল প্রশ্নটি কীভাবে হাইফেনেটেড সম্পত্তি পেতে হবে তা।
ব্রায়ান

18

একটি সহ সিএসএসের বৈশিষ্ট্যগুলি -জাভাস্ক্রিপ্ট অবজেক্টগুলিতে উটকেসে উপস্থাপিত হয়। এটি হবে:

alert( style.textAlign );

আপনি স্ট্রিংটি ব্যবহার করতে একটি বন্ধনী স্বরলিপি ব্যবহার করতে পারেন:

alert( style['text-align'] );

সম্পত্তির নামগুলিতে কেবল অক্ষর, সংখ্যা, সুপরিচিত $চিহ্ন এবং _(পিমভডিবিকে ধন্যবাদ) থাকতে পারে।


পরেরটি কাজ করে .. সেই বাক্য বাক্যগুলির মধ্যে একটি যা আমি স্রেফ মিস করি। আমি উল্লিখিত স্ক্রিপ্টটি নিয়মিত CSS শৈলীর নাম ব্যবহার করে তবে এটি সম্পর্কে জানতে এখনও দরকারী!
দামন

সম্পত্তির নাম যদিও সংখ্যার সাথে শুরু হতে পারে না
অস্টিনবিভি

সম্পত্তির নামগুলিতে ইউনিকোডের অক্ষরগুলির একটি বিশাল পরিমাণ থাকতে পারে। এটি অনুমানের সাথে ঠিক আছে এবং এটি ব্রাউজারগুলির সাথে ঠিক আছে। উদাহরণস্বরূপ:var ò_ó = 'angry';
ক্যামিলো মার্টিন

দ্বিতীয় কোড ব্যবহার করবেন না। সিএসএসের বৈশিষ্ট্যগুলি উট-কেসযুক্ত। আপনার কোডটি কিছু ব্রাউজারে কাজ করতে পারে তবে মানক নয়।
ওরিওল

17

মূল প্রশ্নের উত্তর: সম্পত্তির নাম উদ্ধৃতিতে রাখুন এবং অ্যারে স্টাইল সূচী ব্যবহার করুন:

obj['property-with-hyphens'];

বেশ কয়েকটি উল্লেখ করেছে যে আপনি যে সম্পত্তিটি আগ্রহী তা হ'ল একটি সিএসএস সম্পত্তি। হাইফেন রয়েছে এমন CSS বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে উটের আবরণে রূপান্তরিত হয়। সেক্ষেত্রে আপনি উটের কেসড নামটি ব্যবহার করতে পারেন:

style.textAlign;

তবে এই সমাধানটি কেবল CSS বৈশিষ্ট্যের জন্য কাজ করে। উদাহরণ স্বরূপ,

obj['a-b'] = 2;
alert(obj.aB);          // undefined
alert(obj['a-b']);      // 2

2
@ ব্রায়ান আপনি সিএসএস বৈশিষ্ট্যের জন্য সঠিক। যাইহোক, আমি মূল সাধারণ প্রশ্নের উত্তর দিচ্ছিলাম "আমি কোনও জাভাস্ক্রিপ্টের অবজেক্ট সম্পত্তিটিকে হাইফেনের সাথে কীভাবে উল্লেখ করব?" এখানে আপনার jsfiddle এর একটি আপডেট সংস্করণ রয়েছে: jsfiddle.net/49vkD/1
স্টনি

1
প্রকৃতপক্ষে আমি এখানে নিজে থেকেই উত্তরগুলির পরিসর সঙ্কুচিত করেছিলাম - আমি ধরে নিয়েছিলাম যে ওপি বলতে বোঝায় বিশেষত স্টাইলের বস্তুগুলি। প্রশ্নটি এর চেয়ে কিছুটা বেশি উন্মুক্ত হওয়ার কারণে আমার ডাউন-ভোট সরিয়ে ফেলল।
ব্রায়ান

আমার মনে হচ্ছে তুমি সঠিক. ড্যামন সম্ভবত এটিই চেয়েছিলেন। আমি এটি খুব আক্ষরিকভাবে পড়েছি।
স্টুনি

আপনি অবশ্যই উটের কেসের নাম ব্যবহার করতে হবে । না করতে পারেন
ওরিওল

9

বন্ধনী ব্যবহার করুন:

var notTheFlippingStyleObject = {
    'a-b': 1
};

console.log(notTheFlippingStyleObject["a-b"] === 1); // true

বস্তুর উপর আরও তথ্য: MDN

দ্রষ্টব্য: আপনি যদি স্টাইল অবজেক্ট, সিএসএস স্টাইল ডিক্লেয়ারেশন অ্যাক্সেস করছেন তবে জাভাস্ক্রিপ্ট থেকে এটি অ্যাক্সেস করতে অবশ্যই উটকেস ব্যবহার করা উচিত। আরও তথ্য এখানে


1
আপনি আমাকে সন্তুষ্ট করছেন না - আপনি এই প্রশ্নের অসংখ্য অন্যান্য উত্তরদাতাদের প্রতি ডাব্লু 3 সি স্ট্যান্ডার্ডকে সন্তুষ্ট করছেন: w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSS2Properties , তবে ঠিক একইটিকে উন্নত করা হয়েছে । ..
ব্রায়ান

এই কোড ব্যবহার করবেন না। এটি নয় যে উটের কেসযুক্ত সিএসএস বৈশিষ্ট্যগুলি ক্রস ব্রাউজার হিসাবে বেশি, এটি হ'ল উটের কেসের পরিবর্তে হাইফেন ব্যবহার করা মানসম্মত নয় এবং কাজ করা উচিত নয়।
ওরিওল


4

প্রশ্নের সরাসরি উত্তর দেওয়ার জন্য: style['text-align']আপনি কীভাবে কোনও হাইফেন সহ কোনও সম্পত্তি উল্লেখ করতে পারেন। তবে style.textAlign(বা style['textAlign']) এই ক্ষেত্রে ব্যবহার করা উচিত।


এটি ব্যবহার করবেন না। সিএসএসের বৈশিষ্ট্যগুলি উট-কেসযুক্ত। আপনার কোডটি কিছু ব্রাউজারে কাজ করতে পারে তবে মানক নয়।
ওরিওল

উটের কেস ব্যবহার করতে সামঞ্জস্য করা হয়েছে।
ডসন তোথ


3

আপনার সমস্যা সমাধানের জন্য : হাইফেনগুলি সহ সিএসএসের বৈশিষ্ট্যগুলি এই সমস্যাটি এড়াতে জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি উটকেসে উপস্থাপন করে । আপনি চাই: style.textAlign

প্রশ্নের উত্তরের জন্য : বর্গাকার বন্ধনী স্বরলিপি ব্যবহার করুন : obj.propএকইরূপে obj["prop"]আপনি স্ট্রিং ব্যবহার করে সম্পত্তি নামগুলি অ্যাক্সেস করতে পারেন এবং সনাক্তকারীগুলিতে নিষিদ্ধ অক্ষরগুলি ব্যবহার করতে পারেন।



2

আমি মনে করি সিএসএস শৈলীর ক্ষেত্রে তারা জাভাস্ক্রিপ্টে উট কেসে রূপান্তরিত test-alignহয়ে ওঠে textAlign। সাধারণ ক্ষেত্রে যেখানে আপনি এমন কোনও সম্পত্তি অ্যাক্সেস করতে চান যেখানে আপনি অ্যারে-স্টাইল ব্যবহার করেন সেখানে অ-মানক অক্ষর রয়েছে। ['text-align']


0

প্রথমদিকে, আমি ভাবছি কেন সমাধান আমার শেষের দিকে কাজ করে নি

api['data-sitekey'] //returns undefined

... পরে এই চিত্রটি নির্ণয় করুন যে ডেটা অ্যাট্রিবিউটগুলি অ্যাক্সেস করা আলাদা: এটি এমন হওয়া উচিত:

var api = document.getElementById("some-api");
api.dataset.sitekey

আশাকরি এটা সাহায্য করবে!

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