একটি দৃশ্য কি এই বৈধ ?:
div#foo
span#foo
a#foo
একটি দৃশ্য কি এই বৈধ ?:
div#foo
span#foo
a#foo
উত্তর:
না।
এলিমেন্ট আইডি সম্পূর্ণ নথির মধ্যে স্বতন্ত্র হওয়া উচিত।
$('div#car span#size)
এবং $('div#truck span#size')
।
আমি মনে করি কিছু অনন্য হওয়া উচিত বা অনন্য হওয়া আবশ্যক (অর্থাত্ ওয়েব ব্রাউজার দ্বারা প্রয়োগ করা) between
আইডিগুলি কি অনন্য হওয়া উচিত? হ্যাঁ.
আইডি কি অনন্য হতে হবে? না, কমপক্ষে IE এবং ফায়ারফক্স একাধিক উপাদানকে একই আইডি রাখার অনুমতি দেয়।
getElementById
প্রকৃতপক্ষে সংজ্ঞায়িত করে যে প্রদত্ত আইডি সহ প্রথম উপাদানটি অবশ্যই ফিরে আসতে হবে (যা বর্তমানে সমস্ত ব্রাউজারগুলি যেভাবেই পরিস্থিতি পরিচালনা করে) - আরও নীচের জন্য আমার উত্তর দেখুন।
একাধিক উপাদান একই আইডি থাকতে পারে?
হ্যাঁ - তারা একই ট্যাগ হোক বা না হোক, একাধিক উপাদানগুলির একই আইডি থাকলেও ব্রাউজারগুলি পৃষ্ঠাটি রেন্ডার করে।
এটি কি বৈধ এইচটিএমএল?
না। এটি এখনও এইচটিএমএল 5.1 অনুমান হিসাবে সত্য । তবে, অনুমানটি আরও বলেছে getElementById
অবশ্যই প্রদত্ত আইডি সহ প্রথম উপাদানটি ফেরত দিতে হবে , অবৈধ নথির ক্ষেত্রে আচরণটি অপরিবর্তিত নয়।
এই জাতীয় অবৈধ এইচটিএমএল এর পরিণতিগুলি কী?
বেশিরভাগ (সমস্ত না থাকলে) ব্রাউজারগুলি কল করার সময় কোনও নির্দিষ্ট আইডি সহ প্রথম উপাদানটি নির্বাচন করে এবং এখনও করে নাgetElementById
। আইডি দ্বারা উপাদানগুলি খুঁজে পাওয়া বেশিরভাগ লাইব্রেরি এই আচরণের উত্তরাধিকারী। বেশিরভাগ (সমস্ত না থাকলে) ব্রাউজারগুলি আইডি-বাছাইকারী দ্বারা নির্ধারিত স্টাইলগুলিও প্রয়োগ করে (উদাঃ)#myid
নির্দিষ্ট আইডি সহ সমস্ত উপাদানগুলিতে ) । আপনি যদি আশা করেন এবং এটিই করেন, তবে অনিচ্ছাকৃত কোনও পরিণতি হয় না। যদি আপনি অন্য কিছু প্রত্যাশা / অভিপ্রায় চান (যেমন ID আইডি সহ সমস্ত উপাদান ফেরত দেওয়া হয়েছে, বা কেবল একটি উপাদানটিতে স্টাইল প্রয়োগ করা হয়েছে) তবে আপনার প্রত্যাশা পূরণ হবে না এবং সেই প্রত্যাশার উপর নির্ভর করা কোনও বৈশিষ্ট্য ব্যর্থ হবে।
কিছু জাভাস্ক্রিপ্ট লাইব্রেরি না প্রত্যাশা যে পূরণ না থাকে যখন একাধিক উপাদানের অবশ্যই একই আইডি (দেখুন wootscootinboogie এর মন্তব্য d3.js সম্বন্ধে)
উপসংহার
মানদণ্ডগুলিতে অটল থাকা সবচেয়ে ভাল তবে আপনি যদি জানেন যে আপনার কোডটি আপনার বর্তমান পরিবেশে প্রত্যাশা অনুযায়ী কাজ করে এবং এই আইডিগুলি পূর্বাভাসযোগ্য / রক্ষণাবেক্ষণ পদ্ধতিতে ব্যবহার করা হয়, তবে এটি না করার জন্য কেবল দুটি ব্যবহারিক কারণ রয়েছে:
শক্তি তোমার!
এমনকি উপাদানগুলি বিভিন্ন ধরণের হলেও এটি আপনাকে কিছু গুরুতর সমস্যা দেখা দিতে পারে ...
ধরুন আপনার কাছে একই আইডি সহ 3 টি বোতাম রয়েছে:
<button id="myid" data-mydata="this is button 1">button 1</button>
<button id="myid" data-mydata="this is button 2">button 2</button>
<button id="myid" data-mydata="this is button 3">button 3</button>
বোতাম ক্লিক করা jQuery
হলে আপনি কিছু করার জন্য কিছু কোড সেটআপ করুন myid
:
$(document).ready(function ()
{
$("#myid").click(function ()
{
var buttonData = $(this).data("mydata");
// Call interesting function...
interestingFunction();
$('form').trigger('submit');
});
});
আপনি কি আশা করবেন? প্রতিটি ক্লিক করা বাটন jQuery এর সাথে ক্লিক ইভেন্ট হ্যান্ডলার সেটআপ কার্যকর করবে। দুর্ভাগ্যক্রমে এটি হবে না। কেবলমাত্র 1 ম বোতামটি ক্লিক হ্যান্ডলারকে কল করে। অন্যান্য 2 ক্লিক করলে কিছুই করেন না। দেখে মনে হচ্ছে এগুলি মোটেই বোতাম ছিল না!
তাই সর্বদা উপাদানগুলিকে আলাদা IDs
করুন HTML
। এটি আপনাকে অদ্ভুত জিনিসের বিরুদ্ধে আচ্ছন্ন করবে। :)
<button id="button1" class="mybtn" data-mydata="this is button 1">button 1</button>
<button id="button2" class="mybtn" data-mydata="this is button 2">button 2</button>
<button id="button3" class="mybtn" data-mydata="this is button 3">button 3</button>
এখন আপনি যদি চাইলে ক্লিক ইভেন্ট হ্যান্ডলারটি চালিত হয় যখন কোনও বাটনে ক্লিক করা হয় তা যদি আপনি jQuery কোডে নির্বাচককে এইভাবে CSS
প্রয়োগ করা ক্লাসটি ব্যবহার করতে চান তবে তা পুরোপুরি কাজ করবে :
$(document).ready(function ()
{
$(".mybtn").click(function ()
{
var buttonData = $(this).data("mydata");
// Call interesting function...
interstingFunction();
$('form').trigger('submit');
});
});
এইচটিএমএল-এর জন্য সরকারী অনুমান অনুযায়ী আইডি ট্যাগগুলি অবশ্যই অনন্য হতে হবে এবং সরকারী অনুমানে আরও বলা হয়েছে যে যদি রেন্ডারটি সম্পন্ন করা যায় তবে এটি অবশ্যই (যেমন এইচটিএমএলতে "ত্রুটি" বলে কিছু নেই, কেবল "অবৈধ" এইচটিএমএল)। সুতরাং, নিম্নলিখিত কিভাবে আইডি ট্যাগ আসলে বাস্তবে কাজ করে । এগুলি সমস্ত অবৈধ , তবে এখনও কাজ করে:
এই:
<div id="unique">One</div>
<div id="unique">Two</div>
সমস্ত ব্রাউজারে রেন্ডারগুলি জরিমানা করে। তবে ডকুমেন্ট.জেটএলমেন্টবিআইআইডি কেবল কোনও বস্তু দেয়, অ্যারে নয়; আপনি কেবলমাত্র কোনও আইডি ট্যাগের মাধ্যমে প্রথম ডিভ নির্বাচন করতে সক্ষম হবেন। আপনি যদি জাভাস্ক্রিপ্ট ব্যবহার করে প্রথম ডিভের আইডি পরিবর্তন করতে চান তবে দ্বিতীয় আইডিটি ডকুমেন্ট.জেট এলিমেন্টবাইআইডি (ক্রোম, ফায়ারফক্স এবং আইআই 11 তে পরীক্ষা করা) সহ অ্যাক্সেসযোগ্য হবে। আপনি এখনও অন্যান্য নির্বাচন পদ্ধতি ব্যবহার করে ডিভিটি নির্বাচন করতে পারেন এবং এটির আইডি সম্পত্তি সঠিকভাবে ফিরে আসবে।
দয়া করে নোট করুন করুন উপরের বিষয়টিটি এসভিজি চিত্রগুলি রেন্ডারকারী সাইটগুলিতে একটি সম্ভাব্য সুরক্ষা দুর্বলতা উন্মুক্ত করে, কারণ এসভিজিগুলিকে DOM উপাদান থাকতে পারে এবং সেগুলিতে আইডি ট্যাগও রয়েছে (আপলোড হওয়া চিত্রগুলির মাধ্যমে স্ক্রিপ্ট DOM পুনর্নির্দেশের অনুমতি দেয়)। উপাদানটি প্রতিস্থাপনের আগে যতক্ষণ না এসভিজি ডোমে স্থির থাকে ততক্ষণ চিত্রটি অন্য উপাদানটির জন্য সমস্ত জাভাস্ক্রিপ্ট ইভেন্ট গ্রহণ করবে।
আমি যতদূর জানি এই সমস্যাটি কারওর রাডারে নেই, তবুও এটি আসল।
এই:
<div id="unique" id="unique-also">One</div>
সমস্ত ব্রাউজারে সূক্ষ্ম রেন্ডার দেয়। তবে আপনি যদি ডকুমেন্ট.জেট এলিমেন্টবাইআইডি ('অনন্য-এছাড়াও') চেষ্টা করে থাকেন তবে আপনি এইভাবে সংজ্ঞায়িত প্রথম প্রথম আইডিটিই ব্যবহার করা হবে; উপরের উদাহরণে, তোমাদের ফিরিয়ে আনা হবে নাল (যেমন, Chrome, Firefox ও IE11 উপর পরীক্ষা)।
এই:
<div id="unique unique-two">Two</div>
সমস্ত ব্রাউজারে জরিমানাও রেন্ডার করে, যাইহোক, শ্রেণি ট্যাগগুলির বিপরীতে যা কোনও স্থান দ্বারা পৃথক করা যায়, আইডি ট্যাগ ফাঁকা স্থান দেয়, সুতরাং উপরের উপাদানটির আইডিটি আসলে "অনন্য অনন্য-দ্বি" এবং ডমকে "অনন্য" জন্য জিজ্ঞাসা করে বা ডিওমে অন্য কোথাও সংজ্ঞায়িত না করে (ক্রোম, ফায়ারফক্স এবং আইই 11 তে পরীক্ষা করা) বিচ্ছিন্নতায় "ইউনিক-টু" বাতিল হয়ে যায়।
স্লাকসের উত্তরটি সঠিক, তবে একটি সংযোজন হিসাবে নোট করুন যে এক্স / এইচটিএমএল স্পেসগুলি নির্দিষ্ট করে যে সমস্ত আইডি অবশ্যই একটি (একক) এইচটিএমএল নথির মধ্যে স্বতন্ত্র হওয়া উচিত । যদিও অপটি ঠিক যেমনটি জিজ্ঞাসা করেছিল তা নয়, একই আইডি একাধিক পৃষ্ঠাগুলি জুড়ে বিভিন্ন সত্তার সাথে সংযুক্ত রয়েছে এমন বৈধ উদাহরণ থাকতে পারে।
উদাহরণ:
(আধুনিক ব্রাউজারগুলিতে পরিবেশন করা) নিবন্ধ # প্রধান বিষয়বস্তু { এক ধরণের স্টাইলযুক্ত }
(উত্তরাধিকারের উদ্দেশ্যে পরিবেশন করা) ডিভি # প্রধান বিষয়বস্তু another অন্যভাবে স্টাইলযুক্ত }
সম্ভবত একটি প্রতিষেধক। একটি শয়তানের উকিল পয়েন্ট হিসাবে এখানে চলে যাওয়া।
এবং ক্রম 26,0.1410.65, ফায়ারফক্স 19.0.2, এবং সাফারি 6.0.3 এ মূল্যবান কিসের জন্য, আপনার যদি একই আইডি সহ একাধিক উপাদান থাকে তবে জকিউরি নির্বাচকরা (অন্তত) সেই আইডি সহ প্রথম উপাদানটি ফিরিয়ে দেবেন।
যেমন
<div id="one">first text for one</div>
<div id="one">second text for one</div>
এবং
alert($('#one').size());
পরীক্ষার জন্য http://jsfiddle.net/RuysX/ দেখুন ।
div#one
না করেন তবে যেমন এটি অবশ্যই অবৈধ সত্যটিকে পরিবর্তন করে না।
ওয়েল, ডাব্লু 3.org এ এইচটিএমএল যাচাইকারী ব্যবহার করে, এইচটিএমএল 5 এর সাথে নির্দিষ্ট, আইডি অবশ্যই অনন্য হতে হবে
নিম্নোক্ত বিবেচনা কর...
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MyTitle</title>
</head>
<body>
<div id="x">Barry</div>
<div id="x">was</div>
<div id="x">here</div>
</body>
</html>
বৈধকরণকারী এর সাথে প্রতিক্রিয়া জানায় ...
Line 9, Column 14: Duplicate ID x. <div id="x">was</div>
Warning Line 8, Column 14: The first occurrence of ID x was here. <div id="x">Barry</div>
Error Line 10, Column 14: Duplicate ID x. <div id="x">here</div>
Warning Line 8, Column 14: The first occurrence of ID x was here. <div id="x">Barry</div>
... তবে ওপি সুনির্দিষ্টভাবে জানিয়েছে - বিভিন্ন উপাদানগুলির প্রকার সম্পর্কে কী। সুতরাং নিম্নলিখিত HTML বিবেচনা করুন ...
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MyTitle</title>
</head>
<body>
<div id="x">barry
<span id="x">was here</span>
</div>
</body>
</html>
... বৈধকারীর কাছ থেকে ফলাফলটি ...
Line 9, Column 16: Duplicate ID x. <span id="x">was here</span>
Warning Line 8, Column 14: The first occurrence of ID x was here. <div id="x">barry
উভয় ক্ষেত্রে (একই উপাদান টাইপ, বা বিভিন্ন উপাদান টাইপ), যদি আইডি একাধিকবার ব্যবহার করা হয় তবে এটি বৈধ HTML5 হিসাবে বিবেচনা করা হয় না।
আমরা আইডি ব্যবহারের পরিবর্তে ক্লাসের নাম ব্যবহার করতে পারি। এইচটিএমএল আইডিটি অনন্য হওয়া উচিত তবে ক্লাসগুলি নয়। শ্রেণীর নাম ব্যবহার করে ডেটা পুনরুদ্ধার করা আপনার জেএস ফাইলগুলিতে কোড লাইন সংখ্যা হ্রাস করতে পারে।
$(document).ready(function ()
{
$(".class_name").click(function ()
{
//code
});
});
<div id="one">first text for one</div>
<div id="one">second text for one</div>
var ids = document.getElementById('one');
আইডিতে কেবল প্রথম ডিভ উপাদান থাকে। সুতরাং একই আইডি সহ একাধিক উপাদান উপস্থিত থাকলেও ডকুমেন্ট অবজেক্টটি কেবল প্রথম ম্যাচে ফিরে আসবে।
একই রোল / আইডি নম্বরের ক্লাসে একাধিক শিক্ষার্থী থাকা কি সম্ভব? এইচটিএমএল id
এ্যাট্রিবিউট যেমন হয়। আপনি তাদের জন্য একই বর্গ ব্যবহার করতে পারেন। উদাহরণ:
<div class="a b c"></div>
<div class="a b c d"></div>
ইত্যাদি।
সাধারণত, এইচটিএমএল পৃষ্ঠায় একই আইডি একাধিকবার ব্যবহার না করা ভাল। তবুও, কোনও পৃষ্ঠায় একই আইডি বহুবার ব্যবহার করা সম্ভব। তবে আপনি যখন ইউআরআই / ইউআরএল এর অংশ হিসাবে একটি আইডি ব্যবহার করেন নীচের হিসাবে:
https://en.wikipedia.org/wiki/FIFA_World_Cup#2015_FIFA_corruption_case
এবং যদি আইডি ('2015_FIFA_cormission_case') ওয়েব পৃষ্ঠায় শুধুমাত্র একটি (স্প্যান) উপাদান জন্য ব্যবহৃত হয়:
<span class="mw-headline" id="2015_FIFA_corruption_case">2015 FIFA corruption case</span>
কোন সমস্যা হবে না। বিপরীতে, একই আইডি একাধিক জায়গায় উপস্থিত রয়েছে, ব্রাউজারটি বিভ্রান্ত হবে।
হ্যা তারা পারে.
আমি জানি না যে এই সমস্ত উত্স পুরানো হয়েছে তবে কেবল ইউটিউবটি খুলুন এবং এইচটিএমএল পরিদর্শন করুন। প্রস্তাবিত ভিডিওগুলি পরিদর্শন করার চেষ্টা করুন, আপনি দেখতে পাবেন যে তাদের সবার একই আইডি এবং পুনরাবৃত্তি কাঠামো নিম্নরূপ রয়েছে:
<span id="video-title" class="style-scope ytd-compact-radio-renderer" title="Mix - LARA TACTICAL">