.প্রপ () বনাম .আত্র ()


2296

সুতরাং jQuery 1.6 এর নতুন ফাংশন রয়েছে prop()

$(selector).click(function(){
    //instead of:
    this.getAttribute('style');
    //do i use:
    $(this).prop('style');
    //or:
    $(this).attr('style');
})

বা এক্ষেত্রে তারা কি একই কাজ করে?

আর আমি যদি না ব্যবহার করার সুইচ আছে prop(), সব পুরাতন attr()কল যদি আমি 1.6 স্যুইচ ভাঙবে?

হালনাগাদ

selector = '#id'

$(selector).click(function() {
    //instead of:
    var getAtt = this.getAttribute('style');
    //do i use:
    var thisProp = $(this).prop('style');
    //or:
    var thisAttr = $(this).attr('style');

    console.log(getAtt, thisProp, thisAttr);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<div id='id' style="color: red;background: orange;">test</div>

(এই ঝাঁকুনিটিও দেখুন: http://jsfiddle.net/maniator/JpUF2/ )

কনসোলটি getAttributeস্ট্রিং হিসাবে এবং একটি স্ট্রিং হিসাবে লগ করে attrতবে একটি propহিসাবে CSSStyleDeclarationকেন? এবং এটি কীভাবে ভবিষ্যতে আমার কোডিংকে প্রভাবিত করে?


17
এই এর নির্দিষ্ট সুদ হতে হবে books.google.ca/...

28
@ নীল, কারণ এই পরিবর্তনটি jQuery অতিক্রম করে। এইচটিএমএল বৈশিষ্ট্য এবং DOM বৈশিষ্ট্যের মধ্যে পার্থক্য বিশাল।

7
JQuery এর পরিবর্তিত পরিবর্তনগুলি দেখে আমার মন খারাপ হয়ে যায়। তারা ভুল পথে চলেছে।

4
@Neal। হ্যাঁ, এবং এটি দুটি পদ্ধতি আলাদা করার পরিবর্তে সমস্যাটিকে আরও জটিল করে তোলে।

6
@ ব্রিটিশ ডেভেলপার উত্তরটি সবসময় x বা y ব্যবহারের চেয়ে বেশি জটিল বলে মনে হয় কারণ এটি আপনি কী পেতে চান তার উপর নির্ভর করে। আপনি কি বৈশিষ্ট্যটি চান, না আপনি সম্পত্তি চান? তারা দুটি ভিন্ন জিনিস.
কেভিন বি

উত্তর:


1874

আপডেট 1 নভেম্বর 2012

আমার মূল উত্তরটি jQuery 1.6 এ বিশেষভাবে প্রযোজ্য। আমার পরামর্শ একই রকম তবে jQuery 1.6.1 জিনিসগুলি কিছুটা পরিবর্তিত হয়েছে: ভাঙা ওয়েবসাইটগুলির পূর্বাভাসিত স্তূপের মুখে jQuery দলটি বুলিয়ান বৈশিষ্ট্যের জন্য এটির পুরানো আচরণের কাছাকাছি (তবে ঠিক একই নয়) তে ফিরে আসেattr() । জন রেসিগ এটি সম্পর্কে ব্লগও করেছেন । আমি তাদের যে অসুবিধা ছিল তা দেখতে পাচ্ছি তবে তার পছন্দের প্রস্তাবের সাথে এখনও একমত নই attr()

আসল উত্তর

আপনি যদি কখনও jQuery ব্যবহার করেন এবং সরাসরি DOM না ব্যবহার করেন তবে এটি একটি বিভ্রান্তিকর পরিবর্তন হতে পারে, যদিও এটি অবশ্যই ধারণাগতভাবে উন্নতি is JQuery ব্যবহার করে বাজারের কয়েক মিলিয়ন সাইটের পক্ষে এতটা ভাল নয় যে যদিও এই পরিবর্তনের ফলস্বরূপ ভেঙে যাবে।

আমি মূল বিষয়গুলি সংক্ষেপে জানাব:

  • আপনি সাধারণত না prop()চেয়ে চান attr()
  • বেশিরভাগ ক্ষেত্রে, prop()যা attr()করত তা করে। আপনার কোড attr()সহ কলগুলি প্রতিস্থাপন করা prop()সাধারণত কাজ করবে।
  • বৈশিষ্ট্যগুলির তুলনায় বৈশিষ্ট্যগুলি সাধারণভাবে সহজ। একটি বৈশিষ্ট্য মান কেবল একটি স্ট্রিং হতে পারে যেখানে কোনও সম্পত্তি কোনও প্রকারের হতে পারে। উদাহরণস্বরূপ, checkedসম্পত্তি একটি বুলিয়ান, styleসম্পত্তি প্রতিটি শৈলীর জন্য পৃথক বৈশিষ্ট্যযুক্ত একটি বস্তু, sizeসম্পত্তিটি একটি সংখ্যা।
  • কোথায় উভয় একটি সম্পত্তি এবং একই নামের একটি বৈশিষ্ট্য বিদ্যমান, এক সাধারণত আপডেট অন্যান্য আপডেট হবে, কিন্তু এই যেমন ইনপুট বিশেষ গুণাবলীর জন্য কেস নয় valueএবং checkedএসব গুণাবলীর জন্য, সম্পত্তি সবসময় বর্তমান অবস্থা যখন প্রতিনিধিত্ব করে বৈশিষ্ট্য (IE এর পুরাতন সংস্করণগুলি বাদে) ইনপুটটির ডিফল্ট মান / চেকনেসটির সাথে মিলিত হয় ( defaultValue/ defaultCheckedসম্পত্তিতে প্রতিফলিত )।
  • এই পরিবর্তনটি বৈশিষ্ট্য এবং বৈশিষ্ট্যের সামনে আটকে থাকা যাদু jQuery এর কয়েকটি স্তর সরিয়ে দেয়, যার অর্থ jQuery বিকাশকারীদের বৈশিষ্ট্য এবং বৈশিষ্ট্যের মধ্যে পার্থক্য সম্পর্কে কিছুটা শিখতে হবে। এটি একটি ভাল জিনিস।

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

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

<input id="cb" type="checkbox" checked>
<input id="cb" type="checkbox" checked="checked">

সুতরাং, কীভাবে আপনি কীভাবে জানতে পারবেন যে চেকবক্সটি jQuery এর সাথে চেক করা আছে? স্ট্যাক ওভারফ্লো দেখুন এবং আপনি সাধারণত নিম্নলিখিত পরামর্শ পাবেন:

  • if ( $("#cb").attr("checked") === true ) {...}
  • if ( $("#cb").attr("checked") == "checked" ) {...}
  • if ( $("#cb").is(":checked") ) {...}

এটি checkedবুলিয়ান সম্পত্তি সহকারে করা পৃথিবীর সবচেয়ে সহজ কাজ যা 1995 সাল থেকে প্রতিটি বড় স্ক্রিপ্টযোগ্য ব্রাউজারে নির্বিঘ্নে অস্তিত্বশীল এবং কাজ করেছে:

if (document.getElementById("cb").checked) {...}

সম্পত্তিটি চেকবাক্সকে তুচ্ছ বা চেকবাক্সকে অপ্রয়োজনীয় করে তোলে:

document.getElementById("cb").checked = false

JQuery 1.6 এ, নির্বিঘ্নে হয়ে যায়

$("#cb").prop("checked", false)

checkedএকটি চেকবাক্স স্ক্রিপ্ট করার জন্য বৈশিষ্ট্যটি ব্যবহার করার ধারণাটি সহায়তামূলক এবং অপ্রয়োজনীয়। সম্পত্তি আপনার প্রয়োজন হয়।

  • চেকবক্সটি চেকবক্সটি চেক বা আনচেক করার সঠিক উপায়টি checkedবৈশিষ্ট্যটি কী ব্যবহার করছে তা স্পষ্ট নয়
  • বৈশিষ্ট্যটির মানটি বর্তমান দৃশ্যমান অবস্থার চেয়ে ডিফল্ট প্রতিফলিত করে (আইই এর কিছু পুরানো সংস্করণ বাদে, জিনিসগুলি আরও শক্ত করে তোলে)। পৃষ্ঠায় চেকবক্সটি চেক করা হয়েছে কিনা সে সম্পর্কে বৈশিষ্ট্যটি আপনাকে কিছুই জানায় না। Http://jsfiddle.net/VktA6/49/ দেখুন ।

2
@ টিজে ক্রাউডার, তারপরে কোনটি?
নফতালি ওরফে নীল

9
@Neal: আপনি কি বৈশিষ্ট্য DOM উপাদানে আছে চান এবং কিভাবে বৈশিষ্ট্যাবলী তাদের মান বীজ হতে পারে, হাত এই লিঙ্ক রাখা এমন: দ্য DOM2 এইচটিএমএল স্পেসিফিকেশন , DOM2 বৈশিষ্ট, এবং DOM3 বৈশিষ্ট। প্রতিটি ক্ষেত্রে সূচকগুলি দুর্দান্ত এবং সম্পত্তির যথাযথ বিবরণে আপনাকে সরাসরি লিঙ্ক করে, যেখানে এর মান আসে ইত্যাদি
টিজে ক্রাউডার

4
@ নিল: আবার কী এটি আলাদা করে তোলে: তথ্যের উত্স এবং প্রকৃতি। valueউদাহরণস্বরূপ টিমের উদাহরণ দেখুন। "মান" গুণাবলীর চেয়ে সম্পত্তিattr পুনরুদ্ধার করে এমন একটি ক্রিয়াকলাপ খুব বেশি বোঝায় না (এবং তারা পৃথক হতে পারে)। এগিয়ে যাওয়া, গুণাবলী করা এবং বৈশিষ্ট্যগুলি করা আরও স্পষ্ট হবে যদিও সংক্রমণটি কারওর জন্য কষ্টদায়ক হবে। এটিকে ভুল উপায়ে নেবেন না, কী কী সম্পত্তি তা সম্পর্কে ধারণা পেতে পিছনে সরে যাওয়া এবং চশমা পড়ার মতো কিছুই নেই। valueattrprop
টিজে ক্রাউডার

54
@ নিল: একটি ডোম উপাদান একটি বস্তু। অন্যান্য প্রোগ্রামিং অবজেক্টের মতোই সম্পত্তিগুলিও সেই বস্তুর বৈশিষ্ট্য। এই প্রপসগুলির কয়েকটি মার্কআপের বৈশিষ্ট্যগুলি থেকে প্রাথমিক মানগুলি পেয়ে থাকে, যা ডিওএম অবজেক্টে বৈশিষ্ট্যের একটি পৃথক মানচিত্রে সংরক্ষণ করা হয় । বেশিরভাগ ক্ষেত্রে, কোনও প্রপকে লিখিতভাবে কেবল প্রপকে পরিবর্তন করা হয়, যদিও দুঃখজনকভাবে কিছু কিছু প্রপস রয়েছে যা অন্তর্নিহিত অ্যাট্রির ( valueউদাহরণস্বরূপ) এর মাধ্যমে কোনও পরিবর্তন লিখেন , তবে আসুন আমরা বেশিরভাগই তা উপেক্ষা করার চেষ্টা করি। 99% সময়, আপনি প্রপস দিয়ে কাজ করতে চান। আপনার যদি সত্যিকারের বৈশিষ্ট্যের সাথে কাজ করার দরকার হয় তবে আপনি সম্ভবত এটি জানেন।
টিজে ক্রাউডার

4
@ টিম: " valueএকটিvalue ইনপুটটির সম্পত্তি পরিবর্তন করা আধুনিক ব্রাউজারগুলিতে এর বৈশিষ্ট্য পরিবর্তন করে না " আমি মনে করি না এটি তাই, কারণ আমি এটি উদাহরণ হিসাবে ব্যবহার করতে শুরু করেছিলাম, তবে যখন আমি উদাহরণটি কোডিং করতে শুরু করেছি, তখন ব্যঙ্গ হয়ে গেল যদি এটি ক্রোম, ফায়ারফক্স, অপেরা, আইই তে আপডেট না হয় ... - jsbin.com/ahire4 দেখা যাচ্ছে কারণ আমি input[type="button"]আমার পরীক্ষার জন্য এটি ব্যবহার করছিলাম। এটা তোলে নেই একটি উপর অ্যাট্রিবিউট আপডেট input[type="text"]- jsbin.com/ahire4/2 সংবর্ত সম্পর্কে কথা বলতে !! নেই শুধু উপাদান, কিন্তু টাইপ এটি ...
টি জে Crowder

664

আমার মনে হয় টিম এটি বেশ ভাল বলেছিল , তবে আসুন পিছিয়ে যাই:

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

আসুন এখানে একটি পৃষ্ঠায় এই অ্যাঙ্করটি বিবেচনা করুন http://example.com/testing.html:

<a href='foo.html' class='test one' name='fooAnchor' id='fooAnchor'>Hi</a>

কিছু কৃত্রিম ASCII শিল্প (এবং প্রচুর পরিমাণে জিনিসপত্র রেখে):

+ + ------------------------------------------- + +
| HTMLAunchorElement |
+ + ------------------------------------------- + +
| href: "http://example.com/foo.html" |
| নাম: "fooAunchor" |
| আইডি: "fooAunchor" |
| শ্রেণীর নাম: "একটি পরীক্ষা" |
| বৈশিষ্ট্য: |
| href: "foo.html" |
| নাম: "fooAunchor" |
| আইডি: "fooAunchor" |
| ক্লাস: "একটি পরীক্ষা" |
+ + ------------------------------------------- + +

লক্ষ করুন যে বৈশিষ্ট্য এবং বৈশিষ্ট্য পৃথক are

এখন যদিও এগুলি স্বতন্ত্র, কারণ এগুলি সমস্তই গ্রাউন্ড আপ থেকে ডিজাইনের পরিবর্তে বিবর্তিত হয়েছে, আপনি যদি সেট করে থাকেন তবে বৈশিষ্ট্যগুলির একটি সংখ্যা তারা উত্পন্ন বৈশিষ্ট্যটিতে ফিরে আসে। তবে সবাই তা করেন না এবং hrefউপরে থেকে আপনি দেখতে পাচ্ছেন , ম্যাপিংটি সর্বদা একটি সরল "মানটি পাস" হয় না, কখনও কখনও ব্যাখ্যাটির সাথে জড়িত থাকে।

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

var link = document.getElementById('fooAnchor');
alert(link.href);                 // alerts "http://example.com/foo.html"
alert(link.getAttribute("href")); // alerts "foo.html"

(এই মানগুলি বেশিরভাগ ব্রাউজার অনুসারে হয়; কিছু ভিন্নতা রয়েছে))

linkবস্তুর একটি বাস্তব জিনিস, এবং আপনি সেখানে একটি অ্যাক্সেস মধ্যে একটি বাস্তব পার্থক্য দেখতে পারেন সম্পত্তি এটিতে, এবং একটি অ্যাক্সেস বৈশিষ্ট্য

টিম যেমন বলেছিল, সময়ের সিংহভাগ , আমরা সম্পত্তি নিয়ে কাজ করতে চাই। আংশিকভাবে এটি কারণ যে তাদের মানগুলি (এমনকি তাদের নামগুলি) ব্রাউজারগুলিতে আরও সুসংগত থাকে। আমরা কেবলমাত্র তার সাথে সম্পর্কিত কোনও সম্পত্তি (কাস্টম অ্যাট্রিবিউটস) না থাকলে বা বিশেষত বৈশিষ্ট্যটির জন্য বৈশিষ্ট্য এবং বৈশিষ্ট্য 1: 1 নয় ( hrefউপরে এবং "href" হিসাবে না থাকি) যখন বৈশিষ্ট্যগুলি নিয়ে কাজ করতে চাই above ।

স্ট্যান্ডার্ড বৈশিষ্ট্যগুলি বিভিন্ন ডিওএম স্প্যাসে বিভক্ত:

এই চশমাগুলির দুর্দান্ত সূচক রয়েছে এবং আমি তাদের সাথে লিঙ্কগুলি সহজে রাখার পরামর্শ দিই; আমি সব সময় তাদের ব্যবহার।

কাস্টম বৈশিষ্ট্যগুলির মধ্যে অন্তর্ভুক্ত থাকবে, উদাহরণস্বরূপ, data-xyzআপনার কোডে মেটা-ডেটা সরবরাহ করতে আপনি উপাদানগুলিতে কোনও বৈশিষ্ট্য রাখতে পারেন (এটি এখন HTML5 হিসাবে কার্যকর, যতক্ষণ আপনি data-উপসর্গের সাথে লেগে থাকেন) to (JQuery এর সাম্প্রতিক সংস্করণগুলি আপনাকে ফাংশনটির data-xyzমাধ্যমে উপাদানগুলিতে অ্যাক্সেস dataদেয়, তবে সেই ফাংশনটি কেবল গুনের জন্য একটি অ্যাক্সেসর নয়data-xyz [এটি এর চেয়ে আরও কম এবং কম উভয়ই করে; যদি আপনার প্রকৃত বৈশিষ্ট্যগুলির প্রয়োজন না হয় তবে আমি attrফাংশনটি ইন্টারেক্ট করার জন্য ব্যবহার করব সঙ্গে data-xyzঅ্যাট্রিবিউট।)

attrফাংশন পেয়ে তারা যা ভেবেছিলাম তুমি চেয়েছিলেন, বদলে আক্ষরিক অ্যাট্রিবিউট পেয়ে কাছাকাছি কিছু সংবর্ত যুক্তিবিজ্ঞান আছে ব্যবহৃত। এটি ধারণাগুলি গুলিয়ে ফেলেছে। সরানো propএবং attrএগুলি ডি-কনফ্লেট করা বোঝানো হয়েছিল। সংক্ষেপে v1.6.0 এ jQuery সে ক্ষেত্রে অনেক বেশি এগিয়ে গেছে তবে প্রযুক্তিগতভাবে যখন তাদের ব্যবহার করা উচিত তখন লোকেদের ব্যবহার করা সাধারণ পরিস্থিতিগুলি পরিচালনা করতে কার্যকারিতা দ্রুত যুক্ত করা হয়েছিলattrattrprop


কি দারুন. নতুন 1.6.1 আপডেটটি সত্যিই এই প্রশ্নটিকে কিছুটা বাতিল করে দেয় (তবে খুব বেশি নয়) তবে সেই লিঙ্কটি এখনই মূলত এর উত্তর দেয়
নাফতালি ওরফে নীল

এটি আমার জন্য এটি বাতিল করে দেয় না, আমি কেবল jquery1.7 ব্যবহার করে একটি বাগ ঠিক করেছি যেখানে আমি .attr ('শ্রেণি', 'ব্লা') সেট করছি এবং এটি যেখানে কাজ করছে না সেখানে .prop ('className', 'bla') ) কাজ করেছে
পান্ডাউড

@ পান্ডাউড: ক্রোম 17, ফায়ারফক্স 11, অপেরা 11, আই 6 , আই 8 , আই 9, এবং সাফারি 5.attr('class', 'bla')
টিজে ক্রোডার

ধন্যবাদ, আমার ক্ষেত্রে অবশ্যই সুনির্দিষ্ট কিছু থাকতে হবে, আমাকে এটি পরীক্ষা করতে দিন এবং একটি পরীক্ষার কেস নিয়ে ফিরে আসুন। কোডটি এখনই আমাদের যেমন আছে তেমন পরিবর্তন করে কেবল "প্রপ / ক্লাসনেম" এর পরিবর্তে "অ্যাটর" এর পরিবর্তে আমাদের জন্য একটি বিশাল বাগটি ঠিক করা হয়েছে যখন আমরা jquery1.4 থেকে 1.7 এ চলে এসেছি - সমস্ত ব্রাউজারে
পান্ডাউড

3
@ টিজে ক্রাউডার পুনরায়: .data- এটি উপস্থিত থাকলে এটি বৈশিষ্ট্যের ডিফল্ট মানটি পড়বে , তবে আপনি যদি এটিতে লিখেন তবে এটি উপাদানটির একটি গোপন সম্পত্তি পরিবর্তন করবে এবং বৈশিষ্ট্যটি আপডেট করবে না।
Alnitak

250

এই পরিবর্তনটি দীর্ঘদিন ধরে jQuery এর জন্য আসছে। বছরের পর বছর ধরে, তারা নামের সাথে একটি ফাংশন নিয়ে সন্তুষ্ট ছিল attr()যা বেশিরভাগ DOM বৈশিষ্ট্য পুনরুদ্ধার করে, নাম থেকে আপনি যে ফলাফল আশা করতে চান তা নয়। এর পৃথককরণ attr()এবং prop()এইচটিএমএল বৈশিষ্ট্য এবং ডোম বৈশিষ্ট্যগুলির মধ্যে কিছু বিভ্রান্তি দূর করতে সহায়তা করা উচিত। $.fn.prop()নির্দিষ্ট ডিওএম $.fn.attr()বৈশিষ্ট্যটি গ্র্যাব করে , যখন নির্দিষ্ট এইচটিএমএল বৈশিষ্ট্যটি ধরে ফেলেন।

তারা কীভাবে কাজ করে তা পুরোপুরি বুঝতে, এইচটিএমএল বৈশিষ্ট্য এবং ডোম বৈশিষ্ট্যের মধ্যে পার্থক্য সম্পর্কে এখানে একটি বর্ধিত ব্যাখ্যা রয়েছে .:

এইচটিএমএল বৈশিষ্ট্য

বাক্য গঠন:

<body onload="foo()">

উদ্দেশ্য: মার্কআপটিকে ইভেন্ট, রেন্ডারিং এবং অন্যান্য উদ্দেশ্যে এর সাথে সম্পর্কিত ডেটা থাকতে দেয়।

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

var attr;
attr = document.body.getAttribute("class");
//IE 8 Quirks and below
attr = document.body.getAttribute("className");

বৈশিষ্ট্যগুলি স্ট্রিং আকারে ফিরে আসে এবং ব্রাউজার থেকে ব্রাউজারে অসামঞ্জস্য হতে পারে। যাইহোক, তারা কিছু পরিস্থিতিতে গুরুত্বপূর্ণ হতে পারে। উপরে উদাহরণস্বরূপ, IE 8 কুইর্কস মোড (এবং নীচে) গুন / সেট / অপসারণঅ্যাট্রিবিউটে কোনও ডিওএম বৈশিষ্ট্যের নামটি বিশিষ্ট নামের পরিবর্তে প্রত্যাশা করে। পার্থক্যটি জানা কেন এটি গুরুত্বপূর্ণ কারণগুলির মধ্যে একটি।

DOM বৈশিষ্ট্য

বাক্য গঠন:

document.body.onload = foo;

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

ভিজুয়ালাইজেশান: DOM বৈশিষ্ট্য

এখানে, আপনি ফায়ারব্যাগের "ডোম" ট্যাবটির নীচে সম্পত্তিগুলির একটি তালিকা লক্ষ্য করবেন। এগুলি ডোম বৈশিষ্ট্য। আপনি তাত্ক্ষণিকভাবে তাদের মধ্যে বেশ কয়েকটি লক্ষ্য করবেন যেহেতু আপনি এটি না জেনে আগে তাদের ব্যবহার করেছেন। জাভাস্ক্রিপ্টের মাধ্যমে আপনি যা পেয়ে যাবেন সেগুলির মানগুলি।

নথিপত্র

উদাহরণ

এইচটিএমএল: <textarea id="test" value="foo"></textarea>

javascript: alert($('#test').attr('value'));

JQuery এর আগের সংস্করণগুলিতে, এটি একটি খালি স্ট্রিং দেয়। 1.6 এ, এটি যথাযথ মান প্রদান করে foo,।

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

-মথি


7
$.prop()DOM বৈশিষ্ট্য $.attr()পায়, HTML বৈশিষ্ট্য পায়। আমি মনস্তাত্ত্বিকভাবে এই ব্যবধানটি পূরণ করার চেষ্টা করছি যাতে আপনি উভয়ের মধ্যে পার্থক্য বুঝতে পারেন।

10
ছেলে, আমিও এখন বিভ্রান্ত। তাহলে $('#test').prop('value')কি কিছু ফেরত আসে না? বা .attr('checked')একটি চেকবাক্স জন্য না ? তবে অভ্যস্ত? এখন আপনি এটি পরিবর্তন করতে চান prop('checked')? আমি এই পার্থক্যের প্রয়োজন বুঝতে পারি না - এইচটিএমএল বৈশিষ্ট্য এবং ডোম বৈশিষ্ট্যের মধ্যে পার্থক্য করা কেন গুরুত্বপূর্ণ? সাধারণ ব্যবহার-কেস কী যা এই পরিবর্তনকে "দীর্ঘ সময় আসার" করেছে ? দু'জনের মধ্যে পার্থক্যকে বিমুগ্ধ করার ক্ষেত্রে কী ভুল , কারণ এটি তাদের ব্যবহারের ক্ষেত্রে বেশিরভাগই ওভারল্যাপের মতো বলে মনে হচ্ছে?
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

5
@ ব্লুরাজা: কারণ দুটি ধারণার মধ্যে একটি মারাত্মক অন্তর্নিহিত পার্থক্য রয়েছে যা আপনি জিকিউরির মতো কার্পেটের নীচে ব্রাশ করলে তা অপ্রত্যাশিত ব্যর্থতার ফলস্বরূপ। valueএকটি সর্বাধিক সুস্পষ্ট কেস, যেহেতু valueসম্পত্তি আপনাকে ক্ষেত্রের বর্তমান মান দেবে, তবে valueবৈশিষ্ট্যটি আপনাকে মূল বৈশিষ্ট্যটি দেবে value="..."যা বৈশিষ্ট্যে ঘোষণা করা হয়েছিল , যা আসলে defaultValueসম্পত্তি the (যদিও এই বিশেষ
কেসটি

4
@ ব্লুরাজা: এর উত্তর আরও জটিল। :-) attr('value', ...)jQuery এ সেট করা <1.6 সম্পত্তি সেট করে, তাই বর্তমান মান পরিবর্তন হয় এবং ডিফল্ট মান হয় না। 1.6 এ এটি অ্যাট্রিবিউট সেট করে, তাই তত্ত্বের ক্ষেত্রে ডিফল্ট মান পরিবর্তিত হয় এবং বর্তমান মান হয় না। যাইহোক, valueবৈশিষ্ট্যটি ঠিক কীটি সেট করে সে সম্পর্কে (আরও) ব্রাউজারের অসঙ্গতি রয়েছে । আইইতে এটি বর্তমান মানটিও নির্ধারণ করে; কিছু ব্রাউজারে এটি কেবলমাত্র বর্তমান মান সেট করে যদি বর্তমান মান আগেই সেট করা না থাকে। [ক্রন্দন]
ববিন্স

1
ঠিক যেমন @ কুইন্টিন বলেছিলেন, "এইচটিএমএল দ্বারা বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা হয় D আমি পড়েছি সবচেয়ে সহজ সংস্করণ।
অ্যালান ডং

240

একটি সম্পত্তি ডিওমে আছে; একটি বৈশিষ্ট্যটি এইচটিএমএলতে থাকে যা ডিওমে বিভক্ত হয়।

আরও বিস্তারিত

যদি আপনি কোনও বৈশিষ্ট্য পরিবর্তন করেন তবে এই পরিবর্তনটি ডম-এ প্রতিফলিত হবে (কখনও কখনও আলাদা নামের সাথে)।

উদাহরণ: classকোনও ট্যাগের বৈশিষ্ট্য পরিবর্তন করলে ডিওমে সেই ট্যাগটির classNameসম্পত্তি পরিবর্তন হবে । যদি কোনও ট্যাগটিতে আপনার কোনও বৈশিষ্ট্য না থাকে তবে আপনার কাছে এখনও শূন্য বা ডিফল্ট মান সহ সংশ্লিষ্ট ডোম সম্পত্তি রয়েছে।

উদাহরণ: আপনার ট্যাগটির কোনও classবৈশিষ্ট্য না থাকলেও , ডিওএম সম্পত্তি classNameখালি স্ট্রিংয়ের মান সহ উপস্থিত থাকে।

সম্পাদন করা

আপনি যদি একটি পরিবর্তন করেন তবে অন্যটি নিয়ামক এবং তার বিপরীতে পরিবর্তিত হবে। এই নিয়ামকটি jQuery এ নয়, তবে ব্রাউজারের স্থানীয় কোডে in


তাহলে এর অর্থ কি এই বৈশিষ্ট্যটি আপডেট করা আরও ভাল কারণ আপনি যদি নিশ্চিত হন যে বৈশিষ্ট্য এবং সম্পত্তি উভয়ই আপডেট হয় এবং সারিবদ্ধ হয়?
লুক

1
@ লুক ডিওএম হ'ল অভ্যন্তরীণ প্রযুক্তিগত প্রতিনিধিত্ব, মডেল। এইচটিএমএল বৈশিষ্ট্যগুলি একটি বাহ্যিক উপস্থাপনা, একটি দৃশ্য। আপনি যদি একটি পরিবর্তন করেন তবে অন্যটি নিয়ামক এবং তার বিপরীতে পরিবর্তিত হবে।
ইউনজেন

@ হারারসার্কার সুতরাং তারা উভয়ই একটি নিয়ামকের মাধ্যমে সিঙ্কে রাখা হয়েছে? আমি ধরে নিলাম এটি ঠিক jQuery এর অ্যাটার এবং প্রোপ পদ্ধতির মধ্যে রয়েছে? আপনার ফ্রিডলের একটি পরিবর্তন এখানে দেওয়া হয়েছে যেখানে আমি এটি আরও - jsfiddle.net/v8wRy - অন্বেষণ করি এবং এখনও পর্যন্ত তারা সমতুল্য বলে মনে হয়।
লুক

3
"আপনি যদি একটি পরিবর্তন করেন তবে অন্যটি একটি নিয়ামক এবং তার বিপরীতে পরিবর্তিত হবে This এটি বেশিরভাগ বৈশিষ্ট্য / বৈশিষ্ট্যের জন্য সত্য নয় । সংখ্যাগরিষ্ঠদের জন্য এটি কেবল একটি একমুখী অনুবাদ যেখানে কোনও বৈশিষ্ট্য সংশ্লিষ্ট সম্পত্তির প্রাথমিক মান নির্ধারণ করে । শীর্ষ দুটি উত্তর এটি বিস্তারিতভাবে ব্যাখ্যা করে।
16

@Vincent। আমি দেখতে পাচ্ছি না, যেখানে শীর্ষ দুটি উত্তর আমার উত্তরের বিপরীতে কিছু বলে। অবশ্যই বেশিরভাগ বৈশিষ্ট্যগুলি সম্পর্কিত ডিওএম বৈশিষ্ট্যের প্রাথমিক মান। তবে তারা পারস্পরিক নির্ভরশীল। jQuery('p').prop('className', 'foo');ক্রোম কনসোলের মতো কিছু চেষ্টা করুন এবং আপনি দেখতে পাবেন যে প্রতিটি অনুচ্ছেদে কীভাবে এর classবৈশিষ্ট্যটি পাওয়া যায় 'foo'। অবশ্যই সোর্স কোডে নেই, যা সার্ভার থেকে আসে। এটি একটি ধ্রুবক।
ইউনজেন

140

এটি কেবল HTML বৈশিষ্ট্য এবং DOM অবজেক্টের মধ্যে পার্থক্য যা বিভ্রান্তির সৃষ্টি করে। যাঁরা ডিওএম উপাদানগুলির নেটিভ প্রোপার্টি যেমন একটি this.src this.value this.checkedইত্যাদির উপর অভিনয় করতে স্বাচ্ছন্দ্য বোধ করেন .propতাদের পরিবারের কাছে একটি আন্তরিক স্বাগত। অন্যদের জন্য, এটি বিভ্রান্তির মাত্র একটি যুক্ত স্তর। এটি পরিষ্কার করা যাক।

সবচেয়ে সহজ উপায় মধ্যে পার্থক্য দেখতে .attrএবং .propনিম্নলিখিত উদাহরণ রয়েছে:

<input blah="hello">
  1. $('input').attr('blah'): 'hello'প্রত্যাশিত হিসাবে ফেরত । এখানে কোন আশ্চর্যের কিছু নেই।
  2. $('input').prop('blah'): প্রত্যাবর্তন undefined- কারণ এটি করার চেষ্টা করছে [HTMLInputElement].blah- এবং সেই ডিওএম অবজেক্টে এমন কোনও সম্পত্তি বিদ্যমান নেই। এটি কেবলমাত্র সেই এলিমেন্টের একটি বৈশিষ্ট্য হিসাবে সুযোগে বিদ্যমান[HTMLInputElement].getAttribute('blah')

এখন আমরা এর মতো কয়েকটি জিনিস পরিবর্তন করি:

$('input').attr('blah', 'apple');
$('input').prop('blah', 'pear');
  1. $('input').attr('blah'): ফেরত এ 'apple'? কেন এই "উপাদান" শেষ হিসাবে সেট ছিল "নাশপাতি"। কারণ সম্পত্তিটি ইনপুট বৈশিষ্ট্যে পরিবর্তিত হয়েছিল, নিজেই ডম ইনপুট উপাদান নয় - তারা মূলত একে অপরের থেকে স্বতন্ত্রভাবে কাজ করে।
  2. $('input').prop('blah'): ফেরত দেয় 'pear'

উপরের কারণগুলির জন্য আপনার যে অ্যাপ্লিকেশনটি সম্পর্কে সত্যই সতর্কতা অবলম্বন করা উচিত তা হ'ল একই অ্যাপ্লিকেশন জুড়ে এগুলির ব্যবহার মিশ্রণ করবেন না

পার্থক্যটি দেখায় এমন একটি ফিডল দেখুন: http://jsfiddle.net/garreh/uLQXc/


.attrবনাম .prop:

রাউন্ড 1: স্টাইল

<input style="font:arial;"/>
  • .attr('style') - ম্যাচ করা উপাদানটির জন্য ইনলাইন শৈলীর অর্থ ফেরৎ দেয় "font:arial;"
  • .prop('style') - একটি শৈলীর ঘোষণার বস্তুর অর্থ ফেরৎ দেয় CSSStyleDeclaration

রাউন্ড 2: মান

<input value="hello" type="text"/>   

$('input').prop('value', 'i changed the value');
  • .attr('value')- রিটার্ন 'hello'*
  • .prop('value') - রিটার্ন 'i changed the value'

* দ্রষ্টব্য: এই কারণে jQuery এর একটি .val()পদ্ধতি রয়েছে যা অভ্যন্তরীণভাবে সমান.prop('value')


@ নিল কারণ এটি jquery কার্যকারিতা আরও ভাল কাঠামো রেফারেন্স দেয়। "$ ('ইনপুট') prop যে উপাদান অর্থাত [HTMLInputElement] .getAttribute ( 'বাজে কথা') "
Uğur Gümüşhan

2
ডকির থেকে পৃথক বলে মনে হচ্ছে, api.jquery.com/prop : ".prop () পদ্ধতিটি .attr () পদ্ধতির পরিবর্তে অক্ষম এবং চেক করতে ব্যবহার করা উচিত। মান নির্ধারণ। "
সোয়ান

53

টি এল; ডিআর

ব্যবহার করুন prop()উপর attr()অধিকাংশ ক্ষেত্রে এ।

একটি সম্পত্তি ইনপুট উপাদানের বর্তমান অবস্থা। একটি বৈশিষ্ট্য হ'ল ডিফল্ট মান।

একটি সম্পত্তি বিভিন্ন ধরণের জিনিস থাকতে পারে। একটি বৈশিষ্ট্যে কেবল স্ট্রিং থাকতে পারে


1
আপনার বক্তব্যটির কয়েকটি সহজ নমুনা নিয়ে আসা সম্ভব হলে এবং কখন ব্যবহার করবেন তাও দেখান prop() and when to go for attr()। উত্তরের অপেক্ষায় :)
মৌ

36

মলিন চেকনেস

এই ধারণাটি একটি উদাহরণ প্রদান করে যেখানে পার্থক্যটি পর্যবেক্ষণযোগ্য: http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty

চেষ্টা কর:

  • বোতামটি ক্লিক করুন। উভয় চেকবক্স চেক করা হয়েছে।
  • উভয় চেকবাক্স আনচেক করুন।
  • আবার বোতামটি ক্লিক করুন। কেবলমাত্র propচেকবক্সটি চেক হয়ে গেছে। Bang!

$('button').on('click', function() {
  $('#attr').attr('checked', 'checked')
  $('#prop').prop('checked', true)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>attr <input id="attr" type="checkbox"></label>
<label>prop <input id="prop" type="checkbox"></label>
<button type="button">Set checked attr and prop.</button>

জন্য কিছু বৈশিষ্ট্যাবলী পছন্দ disabledউপর buttonযোগ বা বিষয়বস্তু অ্যাট্রিবিউট সরানোর disabled="disabled"সবসময় সম্পত্তি (HTML5 এর মধ্যে IDL অ্যাট্রিবিউট বলা হয়) টগল কারণ http://www.w3.org/TR/html5/forms.html#attr-fe-disabled বলেছেন:

অক্ষম আইডিএল অ্যাট্রিবিউট অবশ্যই অক্ষম সামগ্রীর বৈশিষ্ট্য প্রতিফলিত করতে হবে।

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

মত অন্যান্য বৈশিষ্ট্যাবলী জন্য checked="checked"উপর input type="checkbox", জিনিষ, বিরতি কারণ একবার আপনি এটিতে ক্লিক, এটা মলিন হয়ে, এবং তারপর যোগ করে অথবা অপসারণ checked="checked"কন্টেন্ট অ্যাট্রিবিউট না checkedness টগল আর নেই

এই কারণে আপনার বেশিরভাগ ব্যবহার করা উচিত .prop, কারণ এটি HTML কার্যকরভাবে পরিবর্তনের জটিল পার্শ্ব-প্রতিক্রিয়াগুলির উপর নির্ভর না করে সরাসরি কার্যকর সম্পত্তিকে প্রভাবিত করে।


সম্পূর্ণতার জন্য এই ভিন্নতাগুলিও চেষ্টা করে দেখুন: 1) বোতামটি ক্লিক করার আগে এবং তারপরে প্রথম চেকবক্সটি আনচেক করুন 2) (এর জন্য আপনাকে স্নিপেট পরিবর্তন করতে হবে) প্রথম checkedchecked="checked"
ইনপুটটিকে

33

সমস্ত ডকটিতে রয়েছে :

বৈশিষ্ট্য এবং বৈশিষ্ট্যের মধ্যে পার্থক্য নির্দিষ্ট পরিস্থিতিতে গুরুত্বপূর্ণ হতে পারে। JQuery 1.6 এর আগে, কিছু বৈশিষ্ট্য পুনরুদ্ধার করার সময় .attr () পদ্ধতিটি কখনও কখনও সম্পত্তি মানগুলিকে বিবেচনা করে নেয়, যা অসঙ্গত আচরণের কারণ হতে পারে। JQuery 1.6 হিসাবে, .prop () পদ্ধতি স্পষ্টভাবে সম্পত্তি মান পুনরুদ্ধার করার একটি উপায় সরবরাহ করে, যখন .attr () বৈশিষ্ট্যগুলি পুনরুদ্ধার করে।

তাই প্রপ ব্যবহার!


2
সুতরাং এর মানে যখন আমি 1.6 এ চলে যাব তখন প্রচুর জিনিস ভেঙে যাবে ??
নাফতালি ওরফে নীল

না, এটি কেবলমাত্র একটি অসঙ্গতিপূর্ণ আচরণ, যদি এটি আগে কাজ করে তবে এটি সবসময় jQuery 1.6 এর সাথে কাজ করবে, এটি ঠিক সেই প্রপটি নিরাপদ;)
আর্নাড এফ

6
আমি মনে আছে। $.attr()বেশিরভাগ সময় আমি এটির সাথে কাজ করেছি সম্পত্তিগুলি পুনরুদ্ধার করা, "কখনও কখনও" নয়। এর ফলে সৃষ্ট বিভ্রান্তি আজও অনুরণনমূলক। দুঃখের বিষয়, এইচটিএমএল বৈশিষ্ট্যগুলি বনাম ডিওএম বৈশিষ্ট্যগুলিতে একটি সুনির্দিষ্ট পঠন পেতে আমার অনেক সমস্যা হচ্ছে , তাই আমি এখানে কিছুটা উত্তর লিখতে পারি।

3
@ আরনাড-এফ সত্য নয়। 1.6 এর পূর্ববর্তী সমস্ত কোড যা চেকবক্সগুলি চেক করতে অ্যাটর ('চেকড') ব্যবহার করে তা এখন ভেঙে যাবে।
ক্যাপ্টসাল্টিজ্যাক

3
@ ম্যাট ম্যাকডোনাল্ড: কী ধরণের "... এইচটিএমএল বৈশিষ্ট্য বনাম ডিওএম বৈশিষ্ট্যগুলির উপর একটি নির্দিষ্ট পাঠ খুঁজে পেতে সমস্যা ..." আপনার অর্থ? বৈশিষ্ট্য (প্রতিফলিত এবং অন্যথায়) DOM2 এইচটিএমএল স্পেসিফিকেশন বর্ণিত হয় ; আপনার কাছে পড়ুন করার প্রয়োজন হতে পারে DOM2 এবং DOM3 চশমা।
টিজে ক্রাউডার

28

বৈশিষ্ট্যগুলি আপনার এইচটিএমএল পাঠ্য নথি / ফাইলে রয়েছে (== কল্পনা করুন এটি আপনার এইচটিএমএল মার্কআপকে পার্স করার ফলাফল), যেখানে
বৈশিষ্ট্যগুলি এইচটিএমএল ডিওএম ট্রিতে থাকে (== মূলত জেএস অর্থে কোনও বস্তুর প্রকৃত সম্পত্তি)।

গুরুত্বপূর্ণভাবে, তাদের মধ্যে অনেকগুলি সিঙ্ক করা হয়েছে (আপনি যদি classসম্পত্তি আপডেট classকরেন তবে html এ বৈশিষ্ট্যটিও আপডেট হবে এবং অন্যথায়)। তবে কিছু বৈশিষ্ট্য অপ্রত্যাশিত বৈশিষ্ট্যগুলির সাথে সিঙ্ক করা যেতে পারে - যেমন, গুণাবলীর checked সাথে সম্পত্তির সাথে মিল থাকে defaultChecked, যাতে

  • ম্যানুয়ালি একটি চেকবাক্স চেক করা .prop('checked')মান পরিবর্তন করবে , কিন্তু পরিবর্তন .attr('checked')এবং .prop('defaultChecked')মান হবে না
  • সেটিংসও $('#input').prop('defaultChecked', true)পরিবর্তন হবে .attr('checked')তবে এটি কোনও উপাদানটিতে দৃশ্যমান হবে না।

থাম্বের বিধি হল : .prop()পদ্ধতিটি বুলিয়ান বৈশিষ্ট্য / বৈশিষ্ট্যগুলির জন্য এবং এইচটিএমএল (যেমন উইন্ডো.লোকেশন) তে বিদ্যমান নেই এমন বৈশিষ্ট্যের জন্য ব্যবহার করা উচিত। অন্যান্য সমস্ত বৈশিষ্ট্য (আপনি এইচটিএমএল এ দেখতে পারেন) .attr() পদ্ধতি সহ কারসাজি করা চালিয়ে যেতে হবে এবং চালিয়ে যাওয়া উচিত । ( http://blog.jquery.com/2011/05/10/jquery-1-6-1-rc-1- রিলিজেড / )

এবং এখানে একটি সারণী যা দেখায় যেখানে .prop()পছন্দসই (যদিও .attr()এখনও ব্যবহার করা যেতে পারে)।

পছন্দসই ব্যবহার সহ টেবিল


আপনি কেন কখনও কখনও .attr () এর পরিবর্তে যেখানে পরে সরকারীভাবে পরামর্শ দেওয়া হয় তার পরিবর্তে .prop () ব্যবহার করতে চান?

  1. .prop()যে কোনও প্রকার - স্ট্রিং, পূর্ণসংখ্যা, বুলিয়ান ফিরিয়ে দিতে পারে; যখন .attr()সবসময় একটি স্ট্রিং ফেরৎ।
  2. .prop()এর থেকে প্রায় 2.5 গুণ গতিবেগ বলা হয় .attr()

কিছু পরিবর্তন হয়েছে, এই ধরনের: $('#myImageId').prop('src', 'http://example.com/img.png'), var class = $('.myDivClass').prop('class'), অথবা $('#myTextBox').prop('type', 'button')। এবং তাই উপর ...

@ মিঃ ওল্ফ, দুঃখিত, আপনি যা বলতে চাইছেন তা আমি পাই না। কি বদলে গেছে'? সিনট্যাক্স সবসময় এর মত ছিল।
lakesare

আমি মনে করি আপনার উত্তরের টেবিলটি অপ্রয়োজনীয়। কারণ .prop()সমস্ত বৈশিষ্ট্য সঙ্গে কাজ করে। আপনি .prop()কলামে সমস্ত সম্পত্তি চিহ্নিত করতে চান না , তাই না?

@ মিঃ ওল্ফ, আমি মনে করি এটি প্রয়োজনীয়, কারণ যেমন ইতিমধ্যে বলা হয়েছে, এটি দেখায় 'কোথায় .prop()পছন্দ করা হয়েছে (যদিও .attr()এখনও ব্যবহার করা যায়)'
লাক্সারে

আমি সাধারণত .attr()কোনও ইভেন্টের সংজ্ঞা দিতে যা ব্যবহার .prop()করতে পারি না তা ব্যবহার করি । ভালো: $('.myDiv').attr('onclick', 'alert("Hello world!")')। আপনি যদি এতে পরিবর্তন .attr()করেন তবে .prop()এটি কার্যকর হবে না। সামগ্রিকভাবে, আমি মনে করি এর .attr()মান সেট করতে বা পাওয়ার কোনও কারণ নেই id/class/href/checked/src.....। খেয়াল করুন যে আমি আপনাকে ভুল বলি না।

20

.attr():

  • মিলিত উপাদানগুলির সেটে প্রথম উপাদানটির জন্য একটি গুণকের মানটি পান ।
  • পৃষ্ঠা লোডের এইচটিএমএল-তে সংজ্ঞায়িত করার কারণে আপনাকে উপাদানটির মান দেয়

.prop():

  • একটি মান পাওয়া সম্পত্তি মিলেছে উপাদানের সেটে প্রথম উপাদান জন্য।
  • জাভাস্ক্রিপ্ট / jquery মাধ্যমে সংশোধিত উপাদানগুলির আপডেট হওয়া মান দেয়

13

সাধারণত আপনি বৈশিষ্ট্যগুলি ব্যবহার করতে চাইবেন। কেবলমাত্র এর জন্য বৈশিষ্ট্যগুলি ব্যবহার করুন:

  1. একটি কাস্টম এইচটিএমএল বৈশিষ্ট্য অর্জন করা (যেহেতু এটি কোনও ডিওএম বৈশিষ্ট্যের সাথে সিঙ্ক হয় না)।
  2. এইচটিএমএল বৈশিষ্ট্যটি পাওয়া যা কোনও ডিওএম বৈশিষ্ট্যের সাথে সিঙ্ক হয় না, যেমন একটি স্ট্যান্ডার্ড এইচটিএমএল বৈশিষ্ট্যের "মূল মান" পান, যেমন <input value="abc">.

7

attributes -> এইচটিএমএল

properties -> ডোম


8
আপনি কী বলতে চান তা আমি জানি তবে এইচটিএমএল হ'ল একটি মার্কআপ ল্যাঙ্গুয়েজ এবং ডিওএম এইচটিএমএল থেকে তৈরি একটি উপস্থাপনা। একটি গার্হস্থ্য বৈশিষ্ট্য এবং বৈশিষ্ট্য উভয় আছে ।
t.niese

@ t.niese, attirbutesএছাড়াও সম্পত্তির একDOM
NkS

সংক্ষিপ্ত উত্তরটি সহজ।
নবী KAZ

6

JQuery 1.6 এর আগে বৈশিষ্ট্য পুনরুদ্ধার করার সময়attr() পদ্ধতিটি কখনও কখনও সম্পত্তি মানগুলিকে বিবেচনা করে নেয়, এটি বরং অসঙ্গত আচরণের কারণ হয়েছিল।

prop()পদ্ধতির ভূমিকা স্পষ্টভাবে সম্পত্তি মানগুলি পুনরুদ্ধার করার একটি উপায় সরবরাহ করে এবং .attr()বৈশিষ্ট্যগুলি পুনরুদ্ধার করে।

দস্তাবেজ:

jQuery.attr() মিলিত উপাদানগুলির সেটে প্রথম উপাদানটির জন্য একটি গুণকের মানটি পান।

jQuery.prop() মিলিত উপাদানগুলির সেটে প্রথম উপাদানটির জন্য কোনও মানের মান পান।


3

ব্যবহার সম্পর্কে ধীরে ধীরে অনুস্মারক prop(), উদাহরণ:

if ($("#checkbox1").prop('checked')) {
    isDelete = 1;
} else {
    isDelete = 0;
}

উপরের ফাংশনটি চেকবক্স 1 পরীক্ষা করা হয়েছে কিনা তা চেক করতে ব্যবহৃত হয়, যদি চেক করা হয়: ফিরে 1; যদি না: ফিরুন 0. ফাংশন প্রোপ () এখানে জিইটি ফাংশন হিসাবে ব্যবহৃত হয়।

if ($("#checkbox1").prop('checked', true)) {
    isDelete = 1;
} else {
    isDelete = 0;
}

উপরের ফাংশনটি চেকবক্স 1 সেট করতে ব্যবহৃত হয় যাচাই করা যায় এবং সর্বদা ফিরে আসুন 1. এখন ফাংশন প্রপ () সেট সেট হিসাবে ব্যবহৃত হয়।

গণ্ডগোল করবেন না

পি / এস: যখন আমি চিত্র src সম্পত্তিটি পরীক্ষা করছি checking তাহলে src খালি, ঠেকনা পৃষ্ঠা (ভুল) বর্তমান URL টি, এবং আসতে ATTR আগমন খালি স্ট্রিং (ডান)।


আপনি এই উদাহরণে ভুল: <img src="smiley.gif" alt="Smiley face" width="42" height="42" onclick="alert($(this).prop('src'))">। এটি কাজ করে এবং চিত্রের অবস্থানটি ফিরিয়ে আনা উচিত।

2

একটি জিনিস .attr()এটি .prop()করতে পারে না: সিএসএস নির্বাচককে প্রভাবিত করে

এখানে এমন একটি সমস্যা যা আমি অন্য উত্তরে দেখিনি।

সিএসএস নির্বাচক [name=value]

  • সাড়া দেবে .attr('name', 'value')
  • কিন্তু সবসময় না .prop('name', 'value')

.prop() শুধুমাত্র কয়েকটি অ্যাট্রিবিউট-সিলেক্টরকে প্রভাবিত করে

.attr() সমস্ত বৈশিষ্ট্য-নির্বাচককে প্রভাবিত করে


0

1) একটি সম্পত্তি ডিওমে আছে; একটি বৈশিষ্ট্যটি এইচটিএমএলতে থাকে যা ডিওমে বিভক্ত হয়।

2) $ (এলেম) .ট্রাট ("চেক করা") (1.6.1+) "চেকড" (স্ট্রিং) চেকবক্সের রাজ্যের সাথে পরিবর্তন হবে

3) $ (এলেম) .ট্রাট ("চেক করা") (প্রাক-1.6) সত্য (বুলিয়ান) চেকবক্সের রাজ্যের সাথে পরিবর্তিত হয়েছে

  • বেশিরভাগ ক্ষেত্রে আমরা DOM অবজেক্টের পরিবর্তে কাস্টম অ্যাট্রিবিউটের মতো ব্যবহার করতে চাই data-img, data-xyz

  • এছাড়াও পার্থক্য কিছু যখন অ্যাক্সেস checkboxমান এবং href সঙ্গে attr()এবং prop()সঙ্গে করে DOM আউটপুট জিনিস পরিবর্তন prop()থেকে পূর্ণ লিঙ্ক হিসাবে originএবং Booleanচেকবক্সটি জন্য মান (pre-1.6)

  • আমরা কেবল propতখন অন্যগুলির সাথে কেবল ডোম উপাদানগুলিতে অ্যাক্সেস করতে পারিundefined


0

প্রোপ () বনাম অ্যাটর () এ আরও কয়েকটি বিবেচনা রয়েছে:

  • সিলেক্টড ইনডেক্স, ট্যাগনাম, নোডনেম, নোডটাইপ, মালিকের ডকুমেন্ট, ডিফল্টচেকড এবং ডিফল্টসিলেক্ট..টেক পুনরুদ্ধার করা উচিত এবং .prop () পদ্ধতিতে সেট করা উচিত। এগুলির সাথে সম্পর্কিত বৈশিষ্ট্য নেই এবং এটি কেবল বৈশিষ্ট্য।

  • ইনপুট ধরণের চেকবক্সের জন্য

       .attr('checked') //returns  checked
       .prop('checked') //returns  true
       .is(':checked') //returns true
  • প্রপ পদ্ধতিটি পরীক্ষিত, নির্বাচিত, অক্ষম, পঠনযোগ্য..ইটিসি জন্য বুলিয়ান মান প্রদান করে যখন অ্যাটর সংজ্ঞায়িত স্ট্রিং প্রদান করে। সুতরাং, আপনি যদি সরাসরি শর্তে .prop ('চেক করা') ব্যবহার করতে পারেন।

  • .attr () কল .prop () অভ্যন্তরীণভাবে তাই কল .attr () পদ্ধতি তাদের সরাসরি .prop () এর মাধ্যমে অ্যাক্সেস করার চেয়ে কিছুটা ধীর হবে।


-2

কোডটি যদি এভাবে লেখা থাকে তবে সমস্যা সমাধানের জন্য গ্যারি হোল উত্তরটি অত্যন্ত প্রাসঙ্গিক

obj.prop("style","border:1px red solid;")

প্রোপ ফাংশনটি রিটার্ন CSSStyleDeclarationঅবজেক্টের কারণে, উপরের কোডটি কিছু ব্রাউজারে সঠিকভাবে কাজ করবে না ( IE8 with Chrome Frame Pluginআমার ক্ষেত্রে এটি পরীক্ষিত )।

সুতরাং নিম্নলিখিত কোডে এটি পরিবর্তন

obj.prop("style").cssText = "border:1px red solid;"

সমস্যার সমাধান।

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