জ্যাকুরি ব্যবহার করে পিতামাতার ডিআইডি আইডি সন্ধান করা


100

আমার মতো কিছু এইচটিএমএল রয়েছে:

<div id="1">
    <p>
        Volume = <input type="text" />
        <button rel="3.93e-6" class="1" type="button">Check answer</button>
    </p>
    <div></div>
</div>

এবং কিছু জেএস এর মত:

$("button").click(function () {
    var buttonNo = $(this).attr('class');
    var correct = Number($(this).attr('rel'));

    validate (Number($("#"+buttonNo+" input").val()),correct);
    $("#"+buttonNo+" div").html(feedback);
});

আমি যা চাই তা হ'ল যদি আমার বোতামে = "1" ক্লাসটি না থাকে (আমি জানি সংখ্যাগত ক্লাসগুলি বৈধ নয়, তবে এটি একটি ডাব্লুআইপি!), তাই আমি বাটনটি নির্ধারণ করতে পারিনি পিতামাতার ডিভিডি আইডি বাস্তব জীবনে এমন একাধিক বিভাগ রয়েছে।

  1. ডিভ প্যারেন্টিংয়ের বোতামটি আইডিটি কীভাবে সন্ধান করব।

  2. উত্তরটি বোতাম কোডে সঞ্চয় করার জন্য আরও কী কী সিনেমিক উপায় হতে পারে। আমি কোনও নন প্রোগ্রামারকে জিনিসগুলি ভঙ্গ না করে অনুলিপি এবং কপি করার পক্ষে এটি যথাসম্ভব বোকা বানানো চাই!

উত্তর:


212

আপনি পিতা বা মাতৃকার নেভিগেশন ইভেন্ট প্রতিনিধি ব্যবহার করতে পারেন । বা বোতামটির পিতামাতার সন্ধান করতে নিকটতম পদ্ধতিটি ব্যবহার করুন ।

দুটির মধ্যে সহজতমটি সম্ভবত সবচেয়ে কাছের।

var id = $("button").closest("div").prop("id");

6
আমি সত্যিই নিকটতম পছন্দ করি কারণ আপনি .closest ("Div.foo") এর মতো কিছু করতে পারেন এবং কোড কাঠামোর সাথে আবদ্ধ নয়।
চিহ্নিত করুন

4
আমি যে পুনরাবৃত্তির কাজটি করতে যাচ্ছিলাম .... তখন আমি জানতাম যে জ্যাকুইয়ের কাছে ইতিমধ্যে কিছু ছিল ... আমার ক্ষেত্রে আমি $ ("#" + আইডি) ক্লোজস্ট ("ডিভ.ফর্ম-গ্রুপ") ব্যবহার করেছি ফর্ম-গ্রুপ ক্লাস ছিল পিতামহী ডিভ।
ক্যাবাজি 99

47

ঘ।

$(this).parent().attr("id");

ঘ।

বিপুল সংখ্যক উপায় থাকতে হবে! একটি উত্তর থাকতে পারে এমন একটি উপাদান লুকিয়ে রাখতে পারে

<div>
    Volume = <input type="text" />
    <button type="button">Check answer</button>
    <span style="display: hidden">3.93e-6&lt;/span>
    <div></div>
</div>

এবং তারপরে উপরের মতো অনুরূপ jQuery কোড রয়েছে:

$("button").click(function () 
{
    var correct = Number($(this).parent().children("span").text());
    validate ($(this).siblings("input").val(),correct);
    $(this).siblings("div").html(feedback);
});

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


এই সম্পাদকটিতে কীভাবে এইচটিএমএল ফর্ম্যাট করা যায় সে সম্পর্কে আমার কোনও ধারণা নেই তবে এটি পিমের ('ডিভ: এক (0)') স্টাফের চেয়ে পিতামাতাকে ধরার একটি সহজ উপায় বলে মনে হচ্ছে; আমি এখানে একটি সূক্ষ্মতা অনুপস্থিত না থাকলে এইচটিএমএল উপাদানগুলির সকলেরই প্রত্যক্ষ পিতা বা মাতা থাকে, যা আপনি কেবল পিতামাতার () এর সাথে পান।
রব গ্রান্ট

পিতা-মাতা প্রকৃতপক্ষে নিকটতম পিতামাতাকে ফিরিয়ে দেবে, তবে, যদি তিনি সিদ্ধান্ত নেন যে তিনি কোনও ফিল্ডসেট বা প্রশ্নের চারপাশে তবে ডিভের অভ্যন্তরে কিছু যুক্ত করতে চান তবে কি হয়।
পিম জাগার

আসলে তার নিজের উদাহরণে এটি <p>
পিম জাগার

প্রকৃতপক্ষে, যদি আরও ডিভগুলি যুক্ত হয় তবে 'ডিভ: এক (0)' ভুল হতে পারে। কাঠামোটি পরিবর্তন করুন, কোডটিকে বিশ্লেষণকারী কোডটি পরিবর্তন করুন :) এবং হ্যাঁ আমি উদাহরণটির জন্য প্রয়োজনীয় ন্যূনতম এইচটিএমএলকে উদাহরণটি সরল করেছিলাম; এটি পিতামাতাকে দুবার কল করা উচিত।
রব গ্রান্ট

কিছু কারণের জন্য যখন আমি পিতামাতাকে ব্যবহার করি () আমি অ্যাটর (আইডি) অ্যাক্সেস করতে পারি না, $(parent[0]).attr('id')কয়েকজন অভিভাবক নির্বাচককে পছন্দ করার পরে আমাকে ফলাফলটি এভাবে গুটিয়ে রাখতে হয়েছিল।
পাইটর কুলা



7

পিতামাতার ডিভির আইডি পেতে:

$(buttonSelector).parents('div:eq(0)').attr('id');

এছাড়াও, আপনি আপনার কোডটি কিছুটা রিফ্যাক্টর করতে পারেন:

$('button').click( function() {
 var correct = Number($(this).attr('rel'));
 validate(Number($(this).siblings('input').val()), correct);
 $(this).parents('div:eq(0)').html(feedback);
});

এখন বাটন-শ্রেণীর প্রয়োজন নেই

ব্যাখ্যা
eq (0), এর অর্থ হল যে আপনি jQuery অবজেক্ট থেকে একটি উপাদান নির্বাচন করবেন, এই ক্ষেত্রে উপাদান 0, এইভাবে প্রথম উপাদানটি। http://docs.jquery.com/Selectors/eq#index
$ (নির্বাচক) .siblings (siblingsSelector) সমস্ত ভাইবোন (একই পিতা বা মাতা উপাদানের) যে মেলে নির্বাচন করব siblingsSelector http://docs.jquery.com/Traversing / ভাইবোন # এক্সপ্রেস select
(নির্বাচক) p http://docs.jquery.com/Traversing/parents#expr
এভাবে: $ (নির্বাচক) .পিতা ('ডিভি: একিউ (0)'); নির্বাচক দ্বারা মেলে উপাদানগুলির প্রথম পিতামাতার সাথে মিলবে।

আপনার jQuery ডক্স, বিশেষত নির্বাচক এবং ট্র্যাভারিংয়ের দিকে নজর দেওয়া উচিত:


সহজ এবং সহজ! বিভাজন: এক (0)? এর মানে কি?
ধনী ব্র্যাডশো

আমি মনে করি 'ডিভ: ইক (0)' ভুল হবে যদি এই সব কিছু কমপক্ষে একটি ডিভের মধ্যে আবৃত থাকে, কারণ আপনি কোনও আত্মীয়ের চেয়ে ডিওএমের নিখুঁতভাবে ট্র্যাভারসাল করছেন। প্রথম উপাদানটি "নিকটতম" পিতা বা মাতা থাকলে কোনটি ভাল হবে তবে এটি অন্যথায় প্রস্তাব দেয়: tinyurl.com/bbegow
রব গ্রান্ট

4
(এর পরিবর্তে আমার পিতামাতার ব্যবহার () পরিবর্তে)
রব গ্রান্ট


5

এটি সহজেই করা যায়:

$(this).closest('table').attr('id');

আপনি এটি কোনও টেবিলের অভ্যন্তরের যেকোন বস্তুর সাথে সংযুক্ত করেন এবং এটি আপনাকে সেই টেবিলের আইডি ফিরিয়ে দেবে।


3

আপনি যেখান থেকে শুরু করতে পারেন ডম গাছটি উপরে নিয়ে যাওয়ার জন্য জ্যাকিউরির একটি প্যারেন্টস () পদ্ধতি রয়েছে।

আপনি যদি আরও বেশি শব্দার্থক উপায়ে এটি করতে আগ্রহী হন তবে আমি মনে করি না যে কোনও কোডের বোতামে REL অ্যাট্রিবিউটটি ব্যবহার করা আপনার কোডের শব্দার্থিকভাবে "এটিই উত্তর" "সংজ্ঞায়নের সেরা উপায়। আমি এই লাইন বরাবর কিছু সুপারিশ করব:

<p id="question1">
    <label for="input1">Volume =</label> 
    <input type="text" name="userInput1" id="userInput1" />
    <button type="button">Check answer</button>
    <input type="hidden" id="answer1" name="answer1" value="3.93e-6" />
</p>

এবং

$("button").click(function () {
    var correctAnswer = $(this).parent().siblings("input[type=hidden]").val();
    var userAnswer = $(this).parent().siblings("input[type=text]").val();
    validate(userAnswer, correctAnswer);
    $("#messages").html(feedback);
});

আপনার বৈধতা এবং প্রতিক্রিয়া কীভাবে কাজ করছে তা পুরোপুরি নিশ্চিত নয় তবে আপনি ধারণাটি পাবেন get


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