জাভাস্ক্রিপ্টে সেটএট্রিবিউট বনাম .attribute = কখন ব্যবহার করবেন?


234

setAttributeবিন্দু ( .) বৈশিষ্ট্য স্বরলিপি পরিবর্তে ব্যবহারের চারপাশে কি সেরা অনুশীলন গড়ে উঠেছে?

উদাহরণ:

myObj.setAttribute("className", "nameOfClass");
myObj.setAttribute("id", "someID");

অথবা

myObj.className = "nameOfClass";
myObj.id = "someID";

1
আমি যখন থেকে সুইচ .setAttribute()করতে [key] = value, সবকিছু জাদুর কাজ শুরু করে।
অ্যান্ড্রু

উত্তর:


73

আপনি .attributeযদি জাভাস্ক্রিপ্টে প্রোগ্রামেটিক অ্যাক্সেস চান তবে আপনার সর্বদা সরাসরি ফর্মটি ব্যবহার করা উচিত (তবে নীচের অংশে লিঙ্কটি দেখুন)। এটি বিভিন্ন ধরণের বৈশিষ্ট্যগুলি ("ভাবাবেগ" মনে করে) সঠিকভাবে পরিচালনা করতে হবে।

আপনি getAttribute/ setAttributeযখন ডোমটি যেমন হয় তেমন আচরণ করতে চান তখন ব্যবহার করুন (যেমন কেবল আক্ষরিক পাঠ্য)। বিভিন্ন ব্রাউজার দুটি বিভ্রান্ত। কুইর্কস মোডগুলি দেখুন : বৈশিষ্ট্য (ইন) সামঞ্জস্য


127
এই উত্তরটি যথেষ্ট পরিষ্কার নয় ... আমি এখনও বুঝতে পেরেছি বলে মনে হয় না।
অস্থায়ী_ ব্যবহারকারী_নাম 21

1
@ অ্যারোভিস্টে - এতে আপনার সাথে একমত একটি নতুন উত্তর যুক্ত হয়েছে যা আশাবাদী আরও পরিষ্কার।
ওলান

1
তবে আপনি যদি উপাদানটির অভ্যন্তরীণ এইচটিএমএলকে প্রভাবিত করতে চান তবে আপনাকে সেটঅ্যাট্রিবিউট ব্যবহার করতে হবে ...
মাইকেল

3
আপনার মানে বহিরাগত এইচটিএমএল * :)
মেগাওয়াক

4
আমি দেখতে পেলাম যে, এইচআরএফ পুরো ইউআরএল ফেরত দেয় তবে getAttribute ('href') সেই বৈশিষ্ট্যে ঠিক কী ফিরে আসে (<a href = "/ সহায়তা" ...)।
প্লাস্টিক খরগোশ

144

জাভাস্ক্রিপ্ট থেকে : সংজ্ঞা নির্দেশিকা , এটি বিষয়গুলি স্পষ্ট করে। এটি নোট করে যে এইচটিএমএল ডক্টের এইচটিএমলেমেন্ট উপাদানগুলি জেএস বৈশিষ্ট্য সংজ্ঞায়িত করে যা সমস্ত মানক এইচটিএমএল বৈশিষ্ট্যের সাথে মিল রাখে।

সুতরাং আপনাকে কেবল setAttributeঅ-মানক বৈশিষ্ট্যের জন্য ব্যবহার করতে হবে ।

উদাহরণ:

node.className = 'test'; // works
node.frameborder = '0'; // doesn't work - non standard attribute
node.setAttribute('frameborder', '0'); // works

2
এবং তদ্ব্যতীত, এটি আপনার উদাহরণের শেষ সেটঅ্যাট্রিবিউটের পরে উপস্থিত হয়, node.frameborderসংজ্ঞায়িত হয় না, সুতরাং মানটি ফিরে পেতে আপনাকে অবশ্যই অ্যাট্রিবিউট পেতে হবে।
মাইকেল 18

5
@ মিশেল সঠিক - আপনি যদি মান সেট করতে সেটঅ্যাট্রিবিউট ব্যবহার করেন তবে এটি পুনরুদ্ধার করতে আপনাকে অবশ্যই getAttribute ব্যবহার করতে হবে।
ওলান

3
frameBorderসরাসরি সেট করার ক্ষেত্রে কোনও ভুল নেই , তবে মূলধনটি নোট করুন। কেউ ভাবেন যে এইচটিএমএল বৈশিষ্ট্যের জাভাস্ক্রিপ্ট সমতুল্য উটকে কেস করা এটি একটি খুব ভাল ধারণা। আমি এর জন্য কোনও স্পেসিফিকেশন সন্ধান করতে সক্ষম হই নি, তবে নেটটি 12 টি নির্দিষ্ট ক্ষেত্রে (কমপক্ষে এইচটিএমএল 4 এর জন্য) এটি বলে মনে হচ্ছে agree উদাহরণস্বরূপ নিম্নলিখিত পোস্টটি দেখুন: drupal.org/node/1420706#comment-6423420
aaaaaaaaaaaa

1
usemapঅ্যাট্রিবিউট যখন একটি চিত্রের জন্য পরিবর্তনশীল মানচিত্র তৈরি করার ডট স্বরলিপি ব্যবহার করে নির্ধারণ করা যাবে না। এটির জন্য প্রয়োজনীয় img.setAttribute('usemap', "#MapName");আপনার উত্তরটি কি usemapতাই বোঝায় যে এটি "অ-মানক"?
এমসিফের্ট

1
এটি বেশিরভাগ ক্ষেত্রেই ভুল। কিছু বৈশিষ্ট্যের বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা হয়, তাই না। এটি কীভাবে তারা অনুমানটি লিখেছিল তা সত্যই। বৈশিষ্ট্যগুলি মানক হওয়ার কারণে এটির কোনও কারণ নেই। তবে এটি সত্য যে কোনও মানসম্পন্ন বৈশিষ্ট্যই কেবল getAttribute () দিয়ে অ্যাক্সেস করা যায় না।
বেন

79

পূর্ববর্তী উত্তরগুলির কোনওটিই সম্পূর্ণ নয় এবং বেশিরভাগটিতে ভুল তথ্য রয়েছে।

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

1। element.attributes

উপাদানসমূহ একটি সম্পত্তি আছে বৈশিষ্ট্যাবলী যে আয় একটি লাইভ NamedNodeMap এর ATTR অবজেক্ট। এই সংগ্রহের সূচকগুলি ব্রাউজারগুলির মধ্যে আলাদা হতে পারে। সুতরাং, আদেশ নিশ্চিত হয় না। NamedNodeMapবৈশিষ্ট্যগুলি যোগ করার এবং অপসারণের পদ্ধতি রয়েছে ( getNamedItemএবং setNamedItemযথাক্রমে)।

লক্ষ্য করুন যে এক্সএমএল স্পষ্টভাবে কেস সংবেদনশীল হলেও, ডিওএম স্পেক স্ট্রিংয়ের নামগুলিকে স্বাভাবিক করার জন্য আহ্বান জানিয়েছে , তাই নামগুলি getNamedItemকার্যকরভাবে ক্ষেত্রে সংবেদনশীল হয়ে উঠেছে।

ব্যবহারের উদাহরণ:

var div = document.getElementsByTagName('div')[0];

//you can look up specific attributes
var classAttr = div.attributes.getNamedItem('CLASS');
document.write('attributes.getNamedItem() Name: ' + classAttr.name + ' Value: ' + classAttr.value + '<br>');

//you can enumerate all defined attributes
for(var i = 0; i < div.attributes.length; i++) {
  var attr = div.attributes[i];
  document.write('attributes[] Name: ' + attr.name + ' Value: ' + attr.value + '<br>');
}

//create custom attribute
var customAttr = document.createAttribute('customTest');
customAttr.value = '567';
div.attributes.setNamedItem(customAttr);

//retreive custom attribute
customAttr = div.attributes.getNamedItem('customTest');
document.write('attributes.getNamedItem() Name: ' + customAttr.name + ' Value: ' + customAttr.value + '<br>');
<div class="class1" id="main" data-test="stuff" nonStandard="1234"></div>

২. element.getAttributeelement.setAttribute

এই পদ্ধতিগুলি Elementঅ্যাক্সেস attributesএবং তার পদ্ধতিগুলির প্রয়োজন ছাড়াই সরাসরি উপস্থিত থাকে তবে একই ফাংশন সম্পাদন করে।

আবার, লক্ষ্য করুন যে স্ট্রিংয়ের নামটি সংবেদনশীল।

ব্যবহারের উদাহরণ:

var div = document.getElementsByTagName('div')[0];

//get specific attributes
document.write('Name: class Value: ' + div.getAttribute('class') + '<br>');
document.write('Name: ID Value: ' + div.getAttribute('ID') + '<br>');
document.write('Name: DATA-TEST Value: ' + div.getAttribute('DATA-TEST') + '<br>');
document.write('Name: nonStandard Value: ' + div.getAttribute('nonStandard') + '<br>');


//create custom attribute
div.setAttribute('customTest', '567');

//retreive custom attribute
document.write('Name: customTest Value: ' + div.getAttribute('customTest') + '<br>');
<div class="class1" id="main" data-test="stuff" nonStandard="1234"></div>

৩. ডিওএম অবজেক্টে প্রোপার্টি, যেমন element.id

DOM অবজেক্টে সুবিধাজনক বৈশিষ্ট্য ব্যবহার করে অনেক বৈশিষ্ট্য অ্যাক্সেস করা যায়। কোন বৈশিষ্ট্য বিদ্যমান তা ডিওএম নোডের ধরণের উপর নির্ভর করে, কোন বৈশিষ্ট্য এইচটিএমএলে সংজ্ঞায়িত করা হয় তা নয়। বৈশিষ্ট্যগুলি ডিওএম অবজেক্টের প্রোটোটাইপ শৃঙ্খলে কোথাও সংজ্ঞায়িত করা হয়েছে। নির্দিষ্ট বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা এলিমেন্টের ধরণের উপর নির্ভর করবে যা আপনি অ্যাক্সেস করছেন। উদাহরণস্বরূপ, classNameএবং সমস্ত ডিওএম নোডগুলিতে idসংজ্ঞায়িত Elementএবং উপস্থিত রয়েছে যা উপাদান (যেমন পাঠ্য বা মন্তব্য নোড নয়)। তবে valueআরও সংকীর্ণ। এটি সংজ্ঞায়িত হয়েছে HTMLInputElementএবং অন্যান্য উপাদানগুলির মধ্যে এটি উপস্থিত থাকতে পারে।

লক্ষ্য করুন যে জাভাস্ক্রিপ্টের বৈশিষ্ট্যগুলি কেস সংবেদনশীল। যদিও বেশিরভাগ বৈশিষ্ট্য ছোট হাতের ব্যবহার করবে তবে কিছুটি উটকেস। তাই নিশ্চিত হওয়ার জন্য সবসময়ই অনুমানটি পরীক্ষা করে দেখুন।

এই "চার্ট" এই ডিওএম অবজেক্টগুলির জন্য প্রোটোটাইপ চেইনের একটি অংশ ক্যাপচার করে। এটি সম্পূর্ণ করার কাছাকাছিও নয়, তবে এটি সামগ্রিক কাঠামোটি ধারণ করে।

                      ____________Node___________
                      |               |         |
                   Element           Text   Comment
                   |     |
           HTMLElement   SVGElement
           |         |
HTMLInputElement   HTMLSpanElement

ব্যবহারের উদাহরণ:

var div = document.getElementsByTagName('div')[0];

//get specific attributes
document.write('Name: class Value: ' + div.className + '<br>');
document.write('Name: id Value: ' + div.id + '<br>');
document.write('Name: ID Value: ' + div.ID + '<br>'); //undefined
document.write('Name: data-test Value: ' + div.dataset.test + '<br>'); //.dataset is a special case
document.write('Name: nonStandard Value: ' + div.nonStandard + '<br>'); //undefined
<div class="class1" id="main" data-test="stuff" nonStandard="1234"></div>

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


এটি পরিষ্কার করার জন্য ধন্যবাদ। আমি কৌতুহলী, আইই এর কোন সংস্করণকে 'আধুনিক' বলে মনে করা হয় এবং এইচটিএমএল অনুমান অনুসরণ করে?
jkdev

3
@ জেকেদেব আইই কখনও আধুনিক হয় না। পুরানো হয়ে যাবার কি কখনও।
সুরজ জৈন

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

16

setAttributeএআরআইএর বৈশিষ্ট্যগুলি পরিবর্তন করার সময় যেখানে প্রয়োজনীয় ছিল সেখানে একটি ঘটনা খুঁজে পেয়েছি , কারণ এখানে কোনও সম্পর্কিত বৈশিষ্ট্য নেই। উদাহরণ স্বরূপ

x.setAttribute('aria-label', 'Test');
x.getAttribute('aria-label');

এর মতো কোনও x.arialabelবা কিছুই নেই , সুতরাং আপনার সেটঅ্যাট্রিবিউট ব্যবহার করতে হবে।

সম্পাদনা করুন: x ["আরিয়া-লেবেল"] কাজ করে না । আপনার সত্যিকারের সেটঅ্যাট্রিবিউট দরকার।

x.getAttribute('aria-label')
null
x["aria-label"] = "Test"
"Test"
x.getAttribute('aria-label')
null
x.setAttribute('aria-label', 'Test2')
undefined
x["aria-label"]
"Test"
x.getAttribute('aria-label')
"Test2"

প্রকৃতপক্ষে জাভাস্ক্রিপ্টে নয় আপনি এই
এক্সটি

পছন্দ করেছেন আমি ঠিক এটি পরীক্ষা করেছি। জেএস বৈশিষ্ট্যগুলি এইচটিএমএল বৈশিষ্ট্যগুলিকে প্রভাবিত করে না। আপনার এখানে সত্যই সেটঅ্যাট্রিবিউট দরকার।
অ্যান্টিমনি

@ অ্যান্টিমনি এটি আশ্চর্যজনক তবে হ্যাঁ আপনি 100% ঠিক আছেন আমি ভোট দিয়ে
যাব

2
আপনি কি নিশ্চিতভাবে আরিয়াবেল নেই?
jgmjgm

8

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

প্রথমত, আপনাকে মনে রাখতে হবে যে HTMLElementএটি একটি জাভাস্ক্রিপ্ট অবজেক্ট। সমস্ত বস্তুর মতো, তাদেরও বৈশিষ্ট্য রয়েছে। অবশ্যই, আপনি নিজের অভ্যন্তরে যে কোনও কিছু বলতে চান এমন একটি সম্পত্তি তৈরি করতে পারেন HTMLElementতবে এটি ডোমের সাথে (পৃষ্ঠায় কী রয়েছে) কিছুই করার দরকার নেই। ডট স্বরলিপি ( .) বৈশিষ্ট্যের জন্য । এখন, কিছু বিশেষ সম্পত্তি আছে যা ম্যাপ করা হয়েছে এবং সেই সময় বা লেখার সময় কেবলমাত্র 4 রয়েছে যা নিশ্চিত করা হয় (এর পরে আরও কিছু)।

সমস্ত HTMLElementগুলি বলা সম্পত্তি অন্তর্ভুক্তattributesHTMLElement.attributesএটি একটি লাইভ NamedNodeMap অবজেক্ট যা ডিওমের উপাদানগুলির সাথে সম্পর্কিত। "লাইভ" এর অর্থ হ'ল যখন নোডটি ডোমে পরিবর্তিত হয় তখন সেগুলি জাভাস্ক্রিপ্টের দিকে পরিবর্তিত হয় এবং এর বিপরীতে। এই ক্ষেত্রে, ডিওএম বৈশিষ্ট্যগুলি হ'ল প্রশ্নযুক্ত নোড। এ Nodeএর একটি .nodeValueসম্পত্তি রয়েছে যা আপনি পরিবর্তন করতে পারবেন। NamedNodeMapঅবজেক্টগুলির একটি ফাংশন বলা হয় setNamedItemযেখানে আপনি পুরো নোড পরিবর্তন করতে পারেন। আপনি কী দ্বারা সরাসরি নোড অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ, আপনি বলতে পারেন .attributes["dir"]যা কোনটি সমান .attributes.getNamedItem('dir');(সাইড নোট, NamedNodeMapকেস-সংবেদনশীল, তাই আপনি পাসও করতে পারেন 'DIR');

HTMLElementযেখানে আপনি কেবল কল করতে পারেন সেখানে সরাসরি একটি অনুরূপ ফাংশন রয়েছেsetAttribute যা অস্তিত্বহীন নোড তৈরি করে যদি এটি উপস্থিত না থাকে এবং সেট করে nodeValue। এছাড়াও রয়েছে কিছু বৈশিষ্ট্য আপনি বৈশিষ্ট্য যেমন সরাসরি অ্যাক্সেস করতে পারেন HTMLElementমাধ্যমে বিশেষ বৈশিষ্ট্য যেমন dir। এটি দেখতে কেমন লাগে তার মোটামুটি ম্যাপিং এখানে দেওয়া হয়েছে:

HTMLElement {
  attributes: {
    setNamedItem: function(attr, newAttr) { 
      this[attr] = newAttr;
    },    
    getNamedItem: function(attr) {
      return this[attr];
    },
    myAttribute1: {
      nodeName: 'myAttribute1',
      nodeValue: 'myNodeValue1'
    },
    myAttribute2: {
      nodeName: 'myAttribute2',
      nodeValue: 'myNodeValue2'
    },
  }
  setAttribute: function(attr, value) { 
    let item = this.attributes.getNamedItem(attr);
    if (!item) {
      item = document.createAttribute(attr);
      this.attributes.setNamedItem(attr, item);
    }
    item.nodeValue = value;
  },
  getAttribute: function(attr) { 
    return this.attributes[attr] && this.attributes[attr].nodeValue;
  },
  dir: // Special map to attributes.dir.nodeValue || ''
  id:  // Special map to attributes.id.nodeValue || ''
  className: // Special map to attributes.class.nodeValue || '' 
  lang: // Special map to attributes.lang.nodeValue || ''

}

সুতরাং আপনি dirবৈশিষ্ট্যগুলি 6 টি পরিবর্তন করতে পারেন :

  // 1. Replace the node with setNamedItem
  const newAttribute = document.createAttribute('dir');
  newAttribute.nodeValue = 'rtl';
  element.attributes.setNamedItem(newAttribute);

  // 2. Replace the node by property name;
  const newAttribute2 = document.createAttribute('dir');
  newAttribute2.nodeValue = 'rtl';
  element.attributes['dir'] = newAttribute2;
  // OR
  element.attributes.dir = newAttribute2;

  // 3. Access node with getNamedItem and update nodeValue
  // Attribute must already exist!!!
  element.attributes.getNamedItem('dir').nodeValue = 'rtl';

  // 4. Access node by property update nodeValue
  // Attribute must already exist!!!
  element.attributes['dir'].nodeValue = 'rtl';
  // OR
  element.attributes.dir.nodeValue = 'rtl';

  // 5. use setAttribute()  
  element.setAttribute('dir', 'rtl');
  
  // 6. use the UNIQUELY SPECIAL dir property
  element["dir"] = 'rtl';
  element.dir = 'rtl';

আপনি পদ্ধতি # 1-5 সঙ্গে সব সম্পত্তি আপডেট করতে পারেন, কিন্তু শুধুমাত্র dir, id, lang, এবং classNameপদ্ধতি # 6।

এইচটিএমলেমেন্টের এক্সটেনশন

HTMLElementএই 4 টি বিশেষ সম্পত্তি আছে। কিছু উপাদান HTMLElementআরও ম্যাপযুক্ত বৈশিষ্ট্যযুক্ত শ্রেণীর বর্ধিত হয় । উদাহরণস্বরূপ, HTMLAnchorElementআছেHTMLAnchorElement.href , HTMLAnchorElement.relআর HTMLAnchorElement.target। তবে, সাবধান , যদি আপনি সেই বৈশিষ্ট্যগুলিকে এমন বৈশিষ্ট্যগুলি সেট করে থাকেন যার বিশেষ বৈশিষ্ট্যগুলি নেই (ক এর মতো HTMLTableElement) তবে বৈশিষ্ট্যগুলি পরিবর্তন করা হয় না এবং সেগুলি কেবল সাধারণ কাস্টম বৈশিষ্ট্য। আরও ভালভাবে বুঝতে, এর উত্তরাধিকারের উদাহরণ এখানে:

HTMLAnchorElement extends HTMLElement {
  // inherits all of HTMLElement
  href:    // Special map to attributes.href.nodeValue || ''
  target:  // Special map to attributes.target.nodeValue || ''
  rel:     // Special map to attributes.ref.nodeValue || '' 
}

কাস্টম সম্পত্তি

এখন বড় সতর্কতা: সমস্ত জাভাস্ক্রিপ্ট অবজেক্টের মতো , আপনি কাস্টম বৈশিষ্ট্য যুক্ত করতে পারেন। তবে, এগুলি ডোমে কোনও পরিবর্তন করবে না। আপনি করতে পারেন:

  const newElement = document.createElement('div');
  // THIS WILL NOT CHANGE THE ATTRIBUTE
  newElement.display = 'block';

তবে এটি একই রকম

  newElement.myCustomDisplayAttribute = 'block';

এর অর্থ একটি কাস্টম সম্পত্তি যুক্ত করা যুক্ত করার সাথে লিঙ্ক দেওয়া হবে না.attributes[attr].nodeValue

কর্মক্ষমতা

পার্থক্যটি দেখানোর জন্য আমি একটি জেএসপিআইপি পরীক্ষার কেস তৈরি করেছি: https://jsperf.com/set-attribute-compistance । মূলত, ক্রম:

  1. কাস্টম বৈশিষ্ট্য কারণ তারা ডোমকে প্রভাবিত করে না এবং হয় না বৈশিষ্ট্য নয়
  2. বিশেষ ব্রাউজার দ্বারা উপলব্ধ ম্যাপিং ( dir,id , className)।
  3. বৈশিষ্ট্য ইতিমধ্যে বিদ্যমান থাকলে ,element.attributes.ATTRIBUTENAME.nodeValue =
  4. setAttribute ();
  5. বৈশিষ্ট্যগুলি ইতিমধ্যে উপস্থিত থাকলে ,element.attributes.getNamedItem(ATTRIBUTENAME).nodeValue = newValue
  6. element.attributes.ATTRIBUTENAME = newNode
  7. element.attributes.setNamedItem(ATTRIBUTENAME) = newNode

উপসংহার (টিএল; ডিআর)

  • থেকে বিশেষ সম্পত্তি ম্যাপিং ব্যবহার করুন HTMLElement: element.dir, element.id, element.className, অথবা element.lang

  • আপনি যদি 100% নিশ্চিত হন যে উপাদানটি HTMLElementএকটি বিশেষ সম্পত্তি সহ একটি বর্ধিত , তবে সেই বিশেষ ম্যাপিংটি ব্যবহার করুন। (আপনি চেক করতে পারেন if (element instanceof HTMLAnchorElement))।

  • আপনি যদি 100% নিশ্চিত হন যে গুণটি ইতিমধ্যে বিদ্যমান, ব্যবহার করুন element.attributes.ATTRIBUTENAME.nodeValue = newValue

  • যদি না হয়, ব্যবহার করুন setAttribute()


আপনি এই চারটি প্রপার্টি ম্যাপিংয়ের উল্লেখ করেছেন: দির, আইডি, ক্লাসনেম এবং ল্যাং। ক্লাসলিস্ট সম্পর্কে কী? ক্লাসলিস্ট এমন কোনও সম্পত্তি ম্যাপিংয়ের তালিকা রয়েছে যা বিদ্যমান থাকার নিশ্চয়তা রয়েছে?
বারজি

classListএটির 100% নিশ্চয়তা রয়েছে, তবে এটি কোনও স্ট্রিং সম্পত্তি নয়, এটি একটি লাইভ DOMTokenListঅবজেক্ট। .classNameসরাসরি সেট করা ম্যানিপুলেট করার চেয়ে দ্রুত classList, তবে আপনি পুরো জিনিসটি ওভাররাইট করে তুলবেন।
শর্টফিউজ

<ইনপুট> এবং <টেক্সটেকার </a> ট্যাগগুলিতে। মান সম্পর্কে কীভাবে? তারা কি ধরনের?
ড্যানিয়েল উইলিয়ামস

উত্তরে যেগুলি উল্লিখিত হয়েছে তারা হ'ল ডাব্লু 3 সি "আইডিএল বৈশিষ্ট্যগুলি প্রতিফলিত করে" call আপনি যখন পরিবর্তন করবেন .value, আপনি এর অভ্যন্তরীণ মানটি পরিবর্তন করছেন HTMLInputElementযা এর পরে গুণাবলীতে প্রতিফলিত হয়। তাদেরও হতে হবে না stringঅভ্যন্তরীণভাবে.valueAsNumber পরিবর্তিত হবে , এবং এর ফর্মটি বৈশিষ্ট্যে প্রদর্শিত হবে । বিকাশকারী.মোজিলা.আর.ইন-value stringvalue
ইউএস

3

"জাভাস্ক্রিপ্টে সেটঅ্যাট্রিবিউট বনাম .attribute = কখন ব্যবহার করবেন?"

একটি সাধারণ নিয়ম ব্যবহার করা হয় .attribute এবং এটি ব্রাউজারে কাজ করে কিনা তা পরীক্ষা করে দেখা হয়।

..যদি এটি ব্রাউজারে কাজ করে, আপনি যেতে ভাল।

..If এটা না, ব্যবহার .setAttribute(attribute, value)পরিবর্তে .attributeজন্য যে অ্যাট্রিবিউট।

সমস্ত বৈশিষ্ট্যের জন্য ধুয়ে ফেলা - পুনরাবৃত্তি।

ঠিক আছে, আপনি যদি অলস হন তবে আপনি সহজভাবে ব্যবহার করতে পারেন .setAttribute। এটি বেশিরভাগ ব্রাউজারে সূক্ষ্মভাবে কাজ করা উচিত। (যদিও সমর্থনকারী ব্রাউজারগুলি এর .attributeচেয়ে ভাল এটি অনুকূল করতে পারে .setAttribute(attribute, value)))


0

এটি এমন এক ক্ষেত্রে দেখায় যেখানে সেটএট্রিবিউট ব্যবহার করা ভাল:

Dev.Opera - দক্ষ জাভাস্ক্রিপ্ট

var posElem = document.getElementById('animation');
var newStyle = 'background: ' + newBack + ';' +
'color: ' + newColor + ';' +
    'border: ' + newBorder + ';';
if(typeof(posElem.style.cssText) != 'undefined') {
    posElem.style.cssText = newStyle;
} else {
    posElem.setAttribute('style', newStyle);
}

2
এই tomo7 ভাগ করে নেওয়ার জন্য ধন্যবাদ, আপনি দয়া করে আরও কিছু ব্যাখ্যা করতে পারেন। না posElem.style = newStyleসমস্ত ব্রাউজার (FIREFOX আমার জন্য চাকরি করতেন) কাজ নাও? এটি কি কেবল সম্পাদনার কারণে পুনরায় setAttributeরঙগুলি এড়িয়ে চলা পছন্দ করা হয়? কি posElem.style.cssText = newStyleতারপর আরো perfomrant posElem.style = newStyle?
Noitidart

0

কোনও উপাদানটিতে বৈশিষ্ট্য স্থাপনের জন্য পদ্ধতি (উদাহরণস্বরূপ শ্রেণি): 1. এলক্লাসনেম = স্ট্রিং ২. এল.সেটআট্রিবিউট ('শ্রেণি', স্ট্রিং) ৩. এল.ট্রিবিউটস.সেটনমেড আইটেম (অবজেক্ট) ৪. এল.সেটআট্রিবিউটনোড (নোড)

আমি একটি সাধারণ বেনমার্ক পরীক্ষা করেছি ( এখানে )

এবং এটি দেখে মনে হয় যে সেটএট্রিবিউটনোড সেটআট্রিবিউট ব্যবহার করে প্রায় 3 গুণ বেশি দ্রুত।

সুতরাং যদি কর্মক্ষমতা একটি সমস্যা হয় - "setAttributeNode" ব্যবহার করুন


আমি মনে করি আপনি ক্রোমের উপর পরীক্ষা চালাচ্ছেন। আমি ক্রোম, সাফারি এবং ফায়ারফক্স ব্যবহার করে আমার ম্যাকের উপর টিট করেছি; প্রত্যাশিত তাদের মধ্যে 3 টি পৃথক ফলাফল দেখিয়েছে।
ওলগুন কেয়া

0

এটি সম্পর্কিত গুগল এপিআই স্ক্রিপ্ট থেকে আকর্ষণীয় গ্রহণ :

তারা এটি এটি করে:

var scriptElement = document.createElement("script");
scriptElement = setAttribute("src", "https://some.com");
scriptElement = setAttribute("nonce", "https://some.com");
scriptElement.async = "true";

লক্ষ্য করুন, তারা কীভাবে setAttribute"src" এবং "ননস" .async = ...ব্যবহার করে তবে "async" বৈশিষ্ট্যের জন্য।

আমি ১০০% নিশ্চিত নই, তবে সম্ভবত এ কারণেই "অ্যাসিঙ্ক" কেবলমাত্র ব্রাউজারগুলিতে সমর্থিত যা সরাসরি .attr =অ্যাসাইনমেন্ট সমর্থন করে । সুতরাং, চেষ্টা করার কোনও বুদ্ধি নেইsestAttribute("async") কারণ ব্রাউজার যদি বুঝতে না পারে.async=... - এটি "অ্যাসিঙ্ক" বৈশিষ্ট্যটি বুঝতে পারে না।

আশা করি, এটি আমার চলমান "আন-মিনিফাইটি জিএপিআই" গবেষণা প্রকল্পের সহায়ক অন্তর্দৃষ্টি । আমি ভুল হলে শুধরে.

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