"শ্রেণি" এবং "আইডি" এইচটিএমএল বৈশিষ্ট্যগুলির নামকরণ - ড্যাশ বনাম বনাম আন্ডারলাইনগুলি [বন্ধ]


113

<div id="example-value">বা <div id="example_value">?

এই সাইট এবং টুইটারটি প্রথম শৈলী ব্যবহার করে। ফেসবুক এবং ভিমেও - দ্বিতীয়।

আপনি কোনটি ব্যবহার করেন এবং কেন?


11
এই লিঙ্কগুলি এখনই ভেঙে গেছে
স্টিভ

উত্তর:


135

আপনার এইচটিএমএল এবং জাভাস্ক্রিপ্টের মধ্যে বিচ্ছিন্নতা নিশ্চিত করতে হাইফেন ব্যবহার করুন।

কেন? নিচে দেখ.

হাইফেনগুলি সিএসএস এবং এইচটিএমএলে ব্যবহারের জন্য বৈধ তবে জাভাস্ক্রিপ্ট অবজেক্টের জন্য নয়।

অনেকগুলি ব্রাউজার বড় প্রকল্পে উইন্ডো / ডকুমেন্ট অবজেক্টে এইচটিএমএল আইডিগুলি বিশ্বব্যাপী অবজেক্ট হিসাবে নিবন্ধভুক্ত করে, এটি সত্যিকারের ব্যথা হতে পারে।

এই কারণে, আমি হাইফেনের সাথে নামগুলি এইভাবে ব্যবহার করি এইচটিএমএল আইডিগুলি কখনই আমার জাভাস্ক্রিপ্টের সাথে বিরোধ করবে না।

নিম্নোক্ত বিবেচনা কর:

message.js

message = function(containerObject){
    this.htmlObject = containerObject;
};
message.prototype.write = function(text){
    this.htmlObject.innerHTML+=text;
};

এইচটিএমএল

<body>
    <span id='message'></span>
</body>
<script>
    var objectContainer = {};
    if(typeof message == 'undefined'){
        var asyncScript = document.createElement('script');
        asyncScript.onload = function(){
            objectContainer.messageClass = new message(document.getElementById('message'));
            objectContainer.messageClass.write('loaded');
        }
        asyncScript.src = 'message.js';
        document.appendChild(asyncScript);
    }else{
        objectContainer.messageClass = new message(document.getElementById('message'));
        objectContainer.messageClass.write('loaded');
    }
</script>

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

message.js

message = function(containerObject){
    this.htmlObject = containerObject;
};
message.prototype.write = function(text){
    this.htmlObject.innerHTML+=text;
};

এইচটিএমএল

<body>
    <span id='message-text'></span>
</body>
<script>
    var objectContainer = {};
    if(typeof message == 'undefined'){
        var asyncScript = document.createElement('script');
        asyncScript.onload = function(){
            objectContainer.messageClass = new message(document.getElementById('message-text'));
            objectContainer.messageClass.write('loaded');
        }
        asyncScript.src = 'message.js';
        document.appendChild(asyncScript);
    }else{
        objectContainer.messageClass = new message(document.getElementById('message-text'));
        objectContainer.messageClass.write('loaded');
    }
</script>

অবশ্যই আপনি বার্তা পাঠ্য বা বার্তা পাঠ্য ব্যবহার করতে পারেন তবে এটি সমস্যার সমাধান করে না এবং আপনি একই সমস্যাটি পরে চালাতে পারেন যেখানে আপনি জাভাস্ক্রিপ্টের পরিবর্তে কোনও এইচটিএমএল অবজেক্টে দুর্ঘটনাক্রমে প্রবেশ করতে পারবেন

একটি মন্তব্য, আপনি এখনও উইন্ডো ['বার্তা-পাঠ্য'] ব্যবহার করে উইন্ডো অবজেক্টের মাধ্যমে (উদাহরণস্বরূপ) এইচটিএমএল অবজেক্টগুলিতে অ্যাক্সেস করতে পারেন;


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

@ ডালাসকলি যদি আপনি না দেখে থাকেন তবে এই উত্তরটি কল করছিলwindow['message-text'];
ক্রিস মেরিসিক

আহ আমি মনে করি এটি পেয়েছি। আশ্চর্যের বিষয় যে জাভাস্ক্রিপ্ট আপনাকে ড্যাশ দিয়ে কোনও স্ট্যান্ড-একা অবজেক্ট হিসাবে কোনও বস্তু তৈরি করার অনুমতি দেয় না, তবে এটি যদি কোনও অন্য অবজেক্টের সম্পত্তি হিসাবে তৈরি করা হয় তবে আপনাকে নামের সাথে ড্যাশ দিয়ে একটি অবজেক্ট তৈরি করতে দেয় it এটির নামে কোনও ড্যাশ নেই।
ডালাস কালে

এই পোস্টটি আসলে আমাকে নির্বোধের কোনও অবস্থান থেকে আপনার সাথে প্রায় 100% চুক্তিতে আমার অবস্থান নিয়ে পুনর্বিবেচনা করতে বাধ্য করেছিল, আমার একমাত্র সংরক্ষণের বিষয়টি এই বিষয়টিতে আপনার অবস্থান দেওয়া হয়েছে যে প্রতি আইডির একটি হওয়া উচিত - এটি প্রতিরোধের জন্য এতে আপনি যদি নির্দিষ্টভাবে এটি কোনও নির্দিষ্ট আইডির জন্য কাজ না করেন তবে একই সমস্যা
ব্যবহারকারী 254694

87

আমি গুগল এইচটিএমএল / সিএসএস স্টাইল গাইড সুপারিশ করব

এটি বিশেষভাবে বলে :

হাইফেন দ্বারা আইডি এবং শ্রেণীর নামগুলিতে শব্দ পৃথক করুন । হাইফেন ব্যতীত অন্য কোনও অক্ষর দ্বারা (বা মোটেও কিছুই নয়) সিলেক্টরে শব্দ এবং সংক্ষিপ্ত বিবরণগুলি বোঝাবেন না যাতে বুঝতে এবং স্ক্যানযোগ্যতার উন্নতি করতে পারেন।

/* Not recommended: does not separate the words “demo” and “image” */
.demoimage {}

/* Not recommended: uses underscore instead of hyphen */
.error_status {}

/* Recommended */
#video-id {}
.ads-sample {}

1
BEMস্বরলিপি সম্পর্কে কি ?
আইলিয়ান ওনোফ্রেই

1
@ আইলিয়ানঅনফ্রেই আপনি অবশ্যই বিএমইএম ব্যবহার করতে পারবেন তবে গুগল স্টাইল গাইডের সাথে এটি স্পষ্টভাবে মেনে চলেন না।
ক্লাস মেলবর্ন

হুম, খুব অদ্ভুত। গুগলের জিডাব্লুটি ফ্রেমওয়ার্কটি ক্যামেলকেস ব্যবহার করে। নিম্নলিখিত ডকুমেন্টে <h1 id = "appTitle"> </h1> কোডের এই লাইনটি দেখুন। gwtproject.org/doc/latest/tutorial/i18n.html
karlihnos

4
গুগল! = স্বয়ংক্রিয়ভাবে ডান। এগুলি প্রায়শই হয় তবে গুগল হওয়া কেবল ন্যায্যতার পক্ষে যথেষ্ট নয়।
ক্রেগ ব্রেট

2
এটি সত্যিই খারাপ ধারণা। যত তাড়াতাড়ি বা পরে আপনি আপনার নামটি এমন একটি প্রোগ্রামিং ভাষায় ব্যবহার করতে চান যা ভেরিয়েবল নামের (মূলত সবগুলি) হাইফেন সমর্থন করে না এবং তারপরে বুম! ইডিয়োটিক নামকরণের নিয়ম।
টিএমএমএম

5

এটি সত্যিই পছন্দের দিকে নেমে আসে তবে কোন নির্দিষ্ট দিক থেকে আপনাকে কী প্রভাবিত করবে তা আপনার সম্পাদনা কোড হতে পারে। উদাহরণস্বরূপ, টেক্সটমেটের স্বয়ংক্রিয়-সম্পূর্ণ বৈশিষ্ট্যটি একটি হাইফেনে থামে, তবে আন্ডারস্কোর দ্বারা পৃথক শব্দের একটি একক শব্দ হিসাবে দেখায়। শ্রেণীর নাম এবং আইডিগুলি এর স্বয়ংক্রিয়-সম্পূর্ণ বৈশিষ্ট্য ( ) ব্যবহার করার the_postচেয়ে কাজের সাথে আরও ভাল ।the-postEsc


আপনি ঠিক বলেছেন তবে আশেপাশের "এইচটিএমএল জঙ্গলে" এটি আরও
মেসেঞ্জার

4

আমি বিশ্বাস করি এটি পুরোপুরি প্রোগ্রামারটির উপর নির্ভর করে। আপনি চাইলে আপনিও উট কেস ব্যবহার করতে পারেন (তবে আমি মনে করি এটি বিশ্রী মনে হবে))

আমি ব্যক্তিগতভাবে হাইফেন পছন্দ করি, কারণ আমার কীবোর্ডে টাইপ করা তত দ্রুত। সুতরাং আমি বলব যে আপনি যেটি সবচেয়ে বেশি স্বাচ্ছন্দ্যযুক্ত তার সাথে আপনার চলতে হবে, যেহেতু আপনার দুটি উদাহরণ ব্যাপকভাবে ব্যবহৃত হয়।


3
এই প্রশ্নটি অনুরূপ এবং এই উত্তরটি যাচাই করে stackoverflow.com/questions/70579/…
ম্যাট স্মিথ

2

হয় উদাহরণ পুরোপুরি বৈধ, আপনি এমনকি ":" বা "মিশ্রণটি ফেলে দিতে পারেন। ডাব্লু 3 গ স্পেস অনুযায়ী বিভাজক হিসাবে । আমি ব্যক্তিগতভাবে "_" ব্যবহার করি যদি এটি কেবল স্থানের সাদৃশ্যের কারণে দুটি শব্দর নাম হয়।


14
হ্যাঁ, আপনি আইডির জন্য কলোন এবং পিরিয়ড ব্যবহার করতে পারেন তবে সিএসএস ফাইল লিখতে থাকা ব্যক্তিটি আপনাকে ঘৃণা করার জন্য এটি একটি ভাল উপায়।
ডেভ মার্কেল

5
এইচটিএমএল শনাক্তকারীকে (সিএসএস 2 এবং উপরে) ZZ:ZZহিসাবে পালাতে হবে ZZ\00003AZZ
ম্যাকডোভেল

1
আমি বলিনি এটি ভাল অনুশীলন ছিল, আমি বলেছিলাম এটি বৈধ ছিল।
মাইলস

5
JQuery বিস্ফোরিত করার জন্য একটি মজাদার উপায়ের মতো শোনাচ্ছে
মাইক রবিনসন

0

আমি প্রথমটি (ওয়ান-টু) ব্যবহার করি কারণ এটি আরও পাঠযোগ্য। চিত্রগুলির জন্য যদিও আমি আন্ডারস্কোরটিকে পছন্দ করি (বিটিএন_মোর.পিএনজি)। উটের কেস (ওয়ান টু) আরেকটি বিকল্প।


0

আসলে কিছু বাহ্যিক ফ্রেমওয়ার্ক (জাভাস্ক্রিপ্ট, পিএইচপি) এর আইডি নামের হাইপেন ব্যবহার করে অসুবিধা (বাগ?) রয়েছে have আমি আন্ডারস্কোর ব্যবহার করি (960 গ্রিডও করে) এবং সমস্ত দুর্দান্ত কাজ করে।


3
কোনটা? যাইহোক, কোড-পঠনযোগ্যতা আরও গুরুত্বপূর্ণ বিষয়।
কামিল টোমাক

-1

আমি মূলত জাভাস্ক্রিপ্টের পার্শ্ব-প্রতিক্রিয়াটির কারণেই আন্ডারস্কোর প্রস্তাব করব।

আপনি যদি নীচে কোডটি আপনার লোকেশন বারে টাইপ করেন তবে আপনি একটি ত্রুটি পাবেন: 'উদাহরণ-মান' অপরিজ্ঞাত ined যদি ডিভটির নাম আন্ডারস্কোর দিয়ে দেওয়া হয় তবে এটি কাজ করবে।

javascript:alert(example-value.currentStyle.hasLayout);

5
এটি হওয়া উচিত document.getElementById("example-value"), যা ভাল কাজ করবে।
চক

এইচটিএমএল সহায়ক সহায়ক ফাংশনগুলির এইচটিএমএলঅ্যাট্রিবিউটস প্যারামিটারে কোনও বৈশিষ্ট্যের জন্য একটি মান নির্দিষ্ট করার সময় আমি এএসপি.নেট এমভিসি তে একই রকম সমস্যা পাচ্ছি।
ম্যাথিজ ওয়েসেলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.