জাভাস্ক্রিপ্ট ব্যবহার করে পরবর্তী / পূর্ববর্তী উপাদান পান?


107

আমি কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে HTML এ পরবর্তী উপাদান পেতে পারি?

ধরুন আমার কাছে তিনটি আছে <div>এবং আমি জাভাস্ক্রিপ্ট কোডের একটিতে একটি রেফারেন্স পেয়েছি, আমি পেতে চাই যা পরবর্তী <div>এবং কোনটি পূর্ববর্তী।

উত্তর:


29

খাঁটি জাভাস্ক্রিপ্টে আমার চিন্তাভাবনাটি হ'ল আপনাকে প্রথমে কোনও সংগ্রহের মধ্যে এগুলি জমা করতে হবে।

var divs = document.getElementsByTagName("div");
//divs now contain each and every div element on the page
var selectionDiv = document.getElementById("MySecondDiv");

সুতরাং মূলত সিলেকশন দিয়ে ডিভেশন সংগ্রহের মাধ্যমে এটির সূচক খুঁজতে পুনরাবৃত্তি করুন এবং তারপরে স্পষ্টতই -1 = পূর্ববর্তী +1 = পরবর্তী সীমানার মধ্যে

for(var i = 0; i < divs.length;i++)
{
   if(divs[i] == selectionDiv)
   {
     var previous = divs[i - 1];
     var next = divs[i + 1];
   }
}

দয়া করে সচেতন থাকুন যদিও আমি বলেছি যে অতিরিক্ত সীমানা আপনার সীমার মধ্যে রয়েছে তা পরীক্ষা করার প্রয়োজন হবে অর্থাৎ আপনি সংগ্রহের শেষ বা শুরুতে নেই।

এর অর্থ এইও হবে যে বলুন আপনার একটি ডিভ আছে যাতে একটি শিশু ডিভ করে। পরবর্তী DIV আছে একটি সহোদর কিন্তু একটি শিশু হবে না, তাই আপনি যদি শুধুমাত্র চান লক্ষ্য DIV আছে হিসাবে একই স্তরের উপর ভাইবোন তারপর definately nextSibling সরান tagName সম্পত্তি।


1
ভাল সমাধান seams কিন্তু পরবর্তী উপাদানটি কীভাবে পাবেন, আপনি যেমন লিখেছেন এখন আমার কাছে সংগ্রহ এবং নির্বাচিত রয়েছে, আপনি কি আমাকে আরও সাহায্য করতে পারেন?
আমর এলগারি

248

nextSiblingএবং previousSiblingবৈশিষ্ট্যগুলি ব্যবহার করুন :

<div id="foo1"></div>
<div id="foo2"></div>
<div id="foo3"></div>

document.getElementById('foo2').nextSibling; // #foo3
document.getElementById('foo2').previousSibling; // #foo1

তবে কিছু ব্রাউজারগুলিতে (আমি ভুলে যাচ্ছি) আপনার হোয়াইটস্পেস এবং মন্তব্য নোডগুলিও পরীক্ষা করতে হবে:

var div = document.getElementById('foo2');
var nextSibling = div.nextSibling;
while(nextSibling && nextSibling.nodeType != 1) {
    nextSibling = nextSibling.nextSibling
}

JQuery এর মতো লাইব্রেরিগুলি আপনার জন্য বক্সের বাইরে এই সমস্ত ক্রস-ব্রাউজারের চেকগুলি পরিচালনা করে।


60
NextElementSibling অনেক বেশি দরকারী।
ট্রিপড

9
নোট করুন যে নেক্সটসিলিং বা নেক্সটএলমেন্টসিলিং পুরোপুরি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয়। ফায়ারফক্সের নেক্সটসিবলিং যখন পাঠ্য নোডগুলি ফেরত দেয় যখন নয় এবং পরবর্তী উপাদানগুলি আইই 9 পর্যন্ত প্রয়োগ করা হয় না।
কার্ল ওঞ্জার

2
উপাদানগুলি ভাইবোন না হলে এটি কাজ করবে না।
rvighne

1
@ ক্লোয়ার: প্রশ্নটি জিজ্ঞাসা করেছিল যে "এইচটিএমএলে" পরবর্তী [বিভাগ] উপাদানটি কীভাবে পাবেন "। divমার্কআপের পরবর্তীটি উপাদানটির সাথে সংলগ্ন নাও হতে পারে; এটি একটি স্তর আরও গভীর বা উচ্চতর স্তর হতে পারে।
rvighne

1
@ Leonbloy আমি আপনার মন্তব্য বুঝতে পারি না। আপনি মৌলিকভাবে বলছেন if i write dirty HTML, Javascript will act strangeকিভাবে পরিষ্কার এবং বৈধ এইচটিএমএল লেখার বিষয়ে?
ডেমেন্টিক

28

সত্যিই আপনার নথির সামগ্রিক কাঠামোর উপর নির্ভর করে।

যদি তোমার থাকে:

<div></div>
<div></div>
<div></div>

এটি ব্যবহারের মাধ্যমে ট্র্যাভারিংয়ের মতো সহজ হতে পারে

mydiv.nextSibling;
mydiv.previousSibling;

তবে, 'নেক্সট' ডিভটি নথির যে কোনও জায়গায় থাকতে পারে আপনার আরও জটিল সমাধানের প্রয়োজন হবে। আপনি কিছু ব্যবহার করে চেষ্টা করতে পারেন

document.getElementsByTagName("div");

এবং আপনি যে কোনও জায়গায় যেখানে চান সেগুলি পেতে এগুলি দিয়ে ছুটে চলা।

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


2
পরের শিবলিং () .. পরবর্তী শিবিং হওয়া উচিত, আমার মনে হয়
পাউল_h

21

প্রত্যেকটি এইচটিএমলেমেন্টে একটি বৈশিষ্ট্য রয়েছে, "পূর্ববর্তীকর্মশিবলিং"।

উদা:

<div id="a">A</div>
<div id="b">B</div>
<div id="c">c</div>

<div id="result">Resultado: </div>

var b = document.getElementById("c").previousElementSibling;

document.getElementById("result").innerHTML += b.innerHTML;

লাইভ: http://jsfiddle.net/QukKM/


এটি IE8 এ ব্যর্থ হয় (অন্যান্য আইই সংস্করণে পরীক্ষা করে নি)। previousSiblingক্রস ব্রাউজার সমাধান বলে মনে হচ্ছে।
নাইস

14

এটি সহজ হবে ... এটি একটি খাঁটি জাভাস্ক্রিপ্ট কোড

    <script>
           alert(document.getElementById("someElement").previousElementSibling.innerHTML);
    </script>

6

এই সমস্ত সমাধানগুলি ওভারকিলের মতো দেখায়। আমার সমাধানটি কেন ব্যবহার করবেন?

previousElementSibling আইই 9 থেকে সমর্থিত

document.addEventListener একটি পলিফিল প্রয়োজন

previousSibling একটি পাঠ্য ফিরে আসতে পারে

দয়া করে মনে রাখবেন যে সীমাগুলি ভেঙে যাওয়ার ক্ষেত্রে আমি প্রথম / শেষ উপাদানটি ফেরত দিতে বেছে নিয়েছি। একটি আরএল ব্যবহারে, আমি এটিকে শূন্য ফেরত দেওয়া পছন্দ করব।

var el = document.getElementById("child1"),
    children = el.parentNode.children,
    len = children.length,
    ind = [].indexOf.call(children, el),
    nextEl = children[ind === len ? len : ind + 1],
    prevEl = children[ind === 0 ? 0 : ind - 1];
    
    document.write(nextEl.id);
    document.write("<br/>");
    document.write(prevEl.id);
<div id="parent">
  <div id="child1"></div>
  <div id="child2"></div>
</div>


0

এটি পরীক্ষা করা হয়েছে এবং এটি আমার পক্ষে কাজ করেছে। আপনার কাছে থাকা দস্তাবেজের কাঠামো অনুযায়ী আমাকে যে উপাদানটি সন্ধান করছে তা পরিবর্তন হয়।

<html>
    <head>
        <script type="text/javascript" src="test.js"></script>
    </head>
    <body>
        <form method="post" id = "formId" action="action.php" onsubmit="return false;">
            <table>
                <tr>
                    <td>
                        <label class="standard_text">E-mail</label>
                    </td>
                    <td><input class="textarea"  name="mail" id="mail" placeholder="E-mail"></label></td>
                    <td><input class="textarea"  name="name" id="name" placeholder="E-mail">   </label></td>
                    <td><input class="textarea"  name="myname" id="myname" placeholder="E-mail"></label></td>
                    <td><div class="check_icon icon_yes" style="display:none" id="mail_ok_icon"></div></td>
                    <td><div class="check_icon icon_no" style="display:none" id="mail_no_icon"></div></label></td>
                    <td><div class="check_message" style="display:none" id="mail_message"><label class="important_text">The email format is not correct!</label></div></td>
                </tr>
            </table>
            <input class="button_submit" type="submit" name="send_form" value="Register"/>
        </form>
    </body>
</html>

 

var inputs;
document.addEventListener("DOMContentLoaded", function(event) {
    var form = document.getElementById('formId');
    inputs = form.getElementsByTagName("input");
    for(var i = 0 ; i < inputs.length;i++) {
        inputs[i].addEventListener('keydown', function(e){
            if(e.keyCode == 13) {
                var currentIndex = findElement(e.target)
                if(currentIndex > -1 && currentIndex < inputs.length) {
                    inputs[currentIndex+1].focus();
                }
            }   
        });
    }
});

function findElement(element) {
    var index = -1;
    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i] == element) {
            return i;
        }
    }
    return index;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.