কীভাবে JQuery সিলেক্টরের কাছ থেকে DOM এলিমেন্ট পাবেন


179

জ্যাকোয়ারি সিলেক্টরের কাছ থেকে আসল ডোমমেন্টটি পাওয়ার জন্য আমার অসম্ভব কঠিন সময় কাটাচ্ছে। কোডের উদাহরণ:

<input type="checkbox" id="bob" />
  var checkbox = $("#bob").click(function() { //some code  } )

এবং কোডের অন্য একটি অংশে আমি চেকবাক্সের চেক করা মানটি নির্ধারণ করার চেষ্টা করছি।

  if ( checkbox.eq(0).SomeMethodToGetARealDomElement().checked )
    //do something.

এবং দয়া করে, আমি এটি করতে চাই না:

  if ( checkbox.eq(0).is(":checked"))
    //do something

এটি আমাকে চেকবক্সের আশেপাশে পেয়েছে তবে অন্য সময় আমার আসল গার্হস্থার দরকার পড়ে।


4
একটি ক্ষেত্রে যার প্রয়োজন হতে পারে: নকআউট.জেজেসে ফাংশনটি applyBindingsএকটি ডম নোডকে জিকুয়েরি নির্বাচক নয় বলে প্রত্যাশা করে। এই প্রশ্নটি (এবং এর উত্তরগুলি) হুবহু যা প্রয়োজন।
মুহাম্মদ আলকারৌরি

উত্তর:


264

আপনি এর সাথে কাঁচা ডোম উপাদানটি অ্যাক্সেস করতে পারেন:

$("table").get(0);

বা আরও সহজভাবে:

$("table")[0];

আসলে এটির প্রয়োজন নেই খুব বেশি (তবে আমার অভিজ্ঞতায়)। আপনার চেকবক্সের উদাহরণটি ধরুন:

$(":checkbox").click(function() {
  if ($(this).is(":checked")) {
    // do stuff
  }
});

আরও "jquery'ish" এবং (imho) আরও সংক্ষিপ্ত। আপনি যদি তাদের সংখ্যা করতে চান?

$(":checkbox").each(function(i, elem) {
  $(elem).data("index", i);
});
$(":checkbox").click(function() {
  if ($(this).is(":checked") && $(this).data("index") == 0) {
    // do stuff
  }
});

এগুলির কয়েকটি বৈশিষ্ট্য ব্রাউজারগুলিতেও মাস্ক পার্থক্যগুলিতে সহায়তা করে। কিছু বৈশিষ্ট্য পৃথক হতে পারে। ক্লাসিক উদাহরণটি এজেএক্স কল। কাঁচা জাভাস্ক্রিপ্টে এটি সঠিকভাবে করার জন্য প্রায় 7 টি ফ্যালব্যাক কেস রয়েছে XmlHttpRequest


1
ধন্যবাদ, তবে গেট পদ্ধতিটি এখনও ডোম উপাদান নয়, একটি জ্যাকোরি উপাদান দেয় element অন্যথায়। চেক করা সম্পত্তি কলটি কাজ করত।
বিলরব

$('a').get(0).nodeType==1এই পৃষ্ঠায় ফায়ারব্যাগে চেষ্টা করুন , এটি কি সত্যের মূল্যায়ন করে বা ব্যর্থ হয়?
মধ্যস্থতা ওমুরিলিভ

@ বিলরব যদি পান () ডোম উপাদানটি না ফেরায় তবে কিছু ভুল। ডক্সটি
সিক্সটেন অটো

$('<input type=checkbox>').appendTo('body').get(0).checked
মধ্যস্থতা ওমুরিলিভ

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

7

সম্পাদনা: মনে হচ্ছে আমি ধারণা করতে ভুল করেছিলাম যে আপনি উপাদানটি পেতে পারেন নি। অন্যরা যেমন এখানে পোস্ট করেছে, আপনি এটি সাথে পেতে পারেন:

$('#element').get(0);

আমি যাচাই করেছি এটির সাথে মিলিত DOM উপাদানটি ফিরে আসে।


2
নিজেকে পুনরাবৃত্তি করছি, কিন্তু আবার ... সমস্ত ব্রাউজারে নেই। আই 7 এবং এর আগে ব্যর্থ।
স্লাভো

6

আমার স্ট্রিং হিসাবে উপাদানটি পাওয়া দরকার ছিল।

jQuery("#bob").get(0).outerHTML;

যা আপনাকে এরকম কিছু দেবে:

<input type="text" id="bob" value="hello world" />

... একটি ডোম উপাদান চেয়ে স্ট্রিং হিসাবে।


1

আপনার যদি ডিওএম উপাদানটির সাথে সরাসরি ইন্টারঅ্যাক্ট করতে হয় তবে কেবল document.getElementByIdযেহেতু ব্যবহার করবেন না , আপনি যদি কোনও নির্দিষ্ট উপাদানটির সাথে ইন্টারঅ্যাক্ট করার চেষ্টা করছেন তবে আপনি সম্ভবত আইডিটি জানতে পারবেন, যেমন ধরে নেওয়া যায় যে ক্লাসের নামটি কেবলমাত্র একটি উপাদানে রয়েছে বা অন্য কোনও বিকল্পের ঝোঁক রয়েছে ঝুঁকিপূর্ণ হতে হবে।

তবে, আমি অন্যদের সাথে একমত হতে চাই, যে বেশিরভাগ ক্ষেত্রে jQuery আপনাকে যা দেয় তা ব্যবহার করার জন্য আপনার যা করা উচিত তা করা শিখানো উচিত, কারণ এটি অত্যন্ত নমনীয়।

আপডেট: একটি মন্তব্যের ভিত্তিতে: এখানে একটি চমৎকার ব্যাখ্যা সহ একটি পোস্ট: http://www.mail-archive.com/jquery-en@googlegroups.com/msg04461.html

$(this).attr("checked") ? $(this).val() : 0

এটি যদি চেক করা হয় তবে মানটি 0 বা এটি না থাকলে ফিরে আসবে।

$(this).val() এটি কেবল ডোমে পৌঁছাচ্ছে এবং চেক করা হয়েছে কিনা তা উপাদানটির "মান" গুণটি পেয়ে যাচ্ছে।


2
আমি ডকুমেন্ট.জেটএলমেন্টবিআইআইডি বা এমএস আজাক্স $ পদ্ধতিটি ব্যবহার করতে পারি। এমএস যেহেতু jquery কে সমর্থন করেছে আমি এমএস আজাক জাভাস্ক্রিপ্টের উপর আমার নির্ভরতা ভাঙার এবং জ্যাকোয়ারি শিখার চেষ্টা করছি। এটি সম্পূর্ণরূপে স্বতঃ-স্বজ্ঞাত বলে মনে হচ্ছে যে jquery চেকবক্স .val () পদ্ধতির আচরণকে পরিবর্তন করবে। প্রতিটি অন্যান্য .val () কল ফর্ম পোস্ট ক্ষেত্রগুলি ফেরত দেয়। jQuery এর সাথে কাজ করতে এত ভাল হয়েছে তাই এটি ভাল () পদ্ধতিটি পরিবর্তন করতে বিভ্রান্তিকর হয়েছিল এবং একটি দ্রুত কাজের সমাধান আশা করছিল।
বিলরোব

2
সুতরাং এই পৃষ্ঠাটি দেখুন: মেল-archive.com/jquery-en@googlegroups.com/msg04461.html
জেমস ব্ল্যাক

2
এটি অদ্ভুত জেমস যে ভ্যাল () পদ্ধতিটি সত্যই .attr ("মান")। আমি ভাবছি কেন এটির জন্য তাদের দুটি পৃথক পদ্ধতি রয়েছে। আমার কাছে .val () হ'ল ফর্ম পোস্ট ক্ষেত্রের মান।
বিলরব

2
@ বিলরব - jQuery আপনাকে আসল উপাদানটিতে যেতে হবে এবং এটি নিজেই করার চেয়ে মানটি কীভাবে পাওয়া যায় তা কেবল সরলকরণ এবং মানককরণ।
জেমস ব্ল্যাক

কখনও কখনও আপনার আইডি এবং একটি পিতা-মাতা-বাচ্চাদের দৃশ্যের সাথে একটি জটিল নির্বাচনকারীর প্রয়োজন হয় এবং আপনি কোডের এক লাইনের সাথে jQuery এর মাধ্যমে এটি পেতে পারেন তবে ডকুমেন্ট.জেটমেন্টমেন্টবাইআইডি ব্যবহার করতে একদিন লাগবে। আমি সম্মত হই যে লাইব্রেরিগুলিতে মিশ্রণ একটি খারাপ ধারণা, তবে এটি কেবল কখনও কখনও ঘটে এবং একটি জেকারি অবজেক্ট থেকে একটি ডম উপাদান পাওয়ার কাজটি খুব শক্ত, বিশেষত .get (0) ব্রাউজারের সামঞ্জস্য না রাখার সাথে।
স্লাভো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.