Как получить идентификатор родительского div с помощью jquery

У меня есть следующие HTML-дивы. Я заполняю все представление в цикле, что означает, что у меня может быть набор этих элементов. Я хочу переключить div "chart" и div "contact-layer". Но когда я делаю это, это не переключает точный div, я пытаюсь переключить, но первый, потому что я не могу дифференцировать div, поскольку все они имеют одинаковые имена классов, за исключением самого первого div. т.е. цель1, цель2, цель3 и т. д.

Теперь я хочу получить идентификатор самого первого div, который варьируется для каждого представления. Я знаю, что для получения родительского идентификатора div я могу использовать

$(this).parents('div').attr('id');

Но я не знаю, как получить самый первый div в этом случае, поэтому я могу получить точный div при самом первом div.

<div id="goal1">
<div class="goal-parent">
            <div class="goal">

                <div id="top-layer">

                    <div id="component">
                        <select class="component-select">
                            <option id="one">WEBINAR SIGN-UPS</option>
                            <option id="one">WEBINAR SIGN-UPSwwewewew</option>
                            <option id="one">WEBINAR SIGN-UPS</option>
                            <option id="one">WEBINAR SIGN-UPS</option>
                            <option id="one">WEBINAR SIGN-UPS</option>
                        </select>
                        <span id="width_tmp"></span>
                    </div>
                    <div id="period">
                        <select class="period-select">
                            <option>Weekly</option>
                            <option>Daily</option>
                            <option>Quarterly</option>
                            <option>Six months</option>
                            <option>Yearly</option>
                        </select>
                        <span id="width_tmp"></span>
                    </div>
                    <div id="close"><i class="fa fa-times"></i></div>

                </div>

                <div id="second-layer">
                    <div id="count">14 544</div>
                    <div id="trend"><i class="fa fa-sort-asc fa-2x"></i></div>
                    <div id="progress-bar"></div>
                </div>

                <div id="third-layer">
                    <div id="avarage">avarage: 16 345</div>
                    <div id="target">target: 20 000</div>
                </div>

                <div id="chart">

                </div>

                <div id="bottom-layer">

                    <div id="romi">ROMI: $30.543</div>

                    <div id="toggle-chart">
                        <div class="icon-chart"><i class="fa fa-line-chart fa-lg"></i></div>
                    </div>

                    <div id="toggle-contact">
                        <div class="icon-contact"><i class="fa fa-user fa-lg" ></i></div>
                    </div>

                </div>

                <div id="contact-layer">

                    <div id="haeder-layer">
                        <div id="title-one">Contact</div>
                        <div id="title-two">Last visit</div>
                    </div>

                    <div id="contacts">
                        <div id="contact-name"> <img src="<?=APP_URL?>corporate/images/icons/ix_op_all/16x16/plain/user1.png" class="navicon">
                            <a href=""> KlausTrolle, Follow-Up Systems AB</a>
                        </div>
                        <div id="contact-visit"> 2 days ago</div>
                        <div id="contact-name"> <img src="<?=APP_URL?>corporate/images/icons/ix_op_all/16x16/plain/user1.png" class="navicon">
                            <a href=""> KlausTrolle, Follow-Up Systems AB</a>
                        </div>
                        <div id="contact-visit"> 2 days ago</div>
                        <div id="contact-name"> <img src="<?=APP_URL?>corporate/images/icons/ix_op_all/16x16/plain/user1.png" class="navicon">
                            <a href=""> KlausTrolle, Follow-Up Systems AB</a>
                        </div>
                        <div id="contact-visit"> 2 days ago</div>
                    </div>
                    <div id="show-all">SHOW ALL CONTACTS</div>
                    <div id="bottom-line"></div>

                </div>

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

3 ответа

Использовать closest метод:

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

.closest( selector ) Returns: jQuery

Описание: для каждого элемента в наборе получите первый элемент, который соответствует селектору, проверив сам элемент и пройдя через его предков в дереве DOM.

Это вернет ближайший div элемент, который является одним из родителей элемента.

$('ELEMENT').parent().attr('id');

Насколько я знаю $(element).parents('div') принесет вам родителей в их иерархическом стеке, таким образом, вы можете сделать $(element).parents('div').last() чтобы получить первый div. Однако, если вы хотите быть более точным, вы должны использовать: compareDocumentPosition Собственное свойство javascript. Вы можете сделать это так:

var arr=$.makeArray($(element).parents('div'));

arr.sort(function(a, b) {
                    if (a === b) return 0;
                    if (!a.compareDocumentPosition) {
                        // support for IE8 and below
                        return a.sourceIndex - b.sourceIndex;
                    }
                    if (a.compareDocumentPosition(b) & 2) {
                        // b comes before a
                        return 1;
                    }
                    return -1;
                });
var topElement=arr[0]

Это даст вам верхний элемент из ваших критериев поиска. Надеется, что это поможет вам.

Другие вопросы по тегам