Как плохо это на jQuery?


$($(this).parent().parent().parent().parent().parent().parent().children()[0]).html()


1740
2
задан 12 марта 2011 в 05:03 Источник Поделиться
Комментарии
5 ответов

.parent().parent().parent().parent().parent().parent()

Это может значительно упростить с помощью родителей() , который возвращает массив, который можно просто открыть с индексом. Т. е. вы можете заменить выше:

.parents()[5]

Плюсы этого, помимо того, что более сжатый, что его читатель Вашего кода видно, кто из родителей вы обращаетесь, не считая звонков на родителей и, что если тебе нужно получить доступ к другому родителю, можно просто изменить количество вместо того, чтобы добавить или удалить вызовы родителей.

20
ответ дан 12 марта 2011 в 06:03 Источник Поделиться

Это...это очень плохо. Но нет никакого реального способа, чтобы сказать, как плохо он должен быть с учетом других ограничений. Например, если это файл JS должны влиять на страницы, чьи HTML, который вы не контролируете, то вы не можете сделать гораздо лучше, чем что-то вроде

$(this).parents(":eq(5)").children(":eq(0)").html()

Если этот элемент вам предстоит открыть много, рассмотрите возможность добавления идентификатора или класса, а затем установив на это.

$("#fifth-parent-first-child").html() //or something descriptive

Опять же, если у вас нет доступа к HTML, вам нужно добавить его себя во время выполнения

$(document).ready(
function () {
$(foo).parents(":eq(5)").children(":eq(0)").addClass("something-descriptive")
}
);
$(".something-descriptive").html()

Рассмотрим оклейку некоторые окружающие кодекс для большего понимания.

14
ответ дан 12 марта 2011 в 07:03 Источник Поделиться

Кроме того, что сказал sepp2k:

Вместо обращения к DOM-объекта первого ребенка, а затем преобразования его в объект jQuery, вы можете использовать метод .экв() для доступа к нему напрямую.

Так что вместо этого:

$($(this)/* ... */.children()[0]).html()

Используйте это:

$(this)/* ... */.children().eq(0).html()

И есть, возможно, больше способов оптимизировать его, если вы показать HTML-код, он действует на.

10
ответ дан 12 марта 2011 в 06:03 Источник Поделиться

1. Вместо того, чтобы делать так много .родитель() звонки, вы можете использовать .родители():

$(this).parents(':eq(5)');

2. Вы можете использовать .экв() , чтобы n- го вхождения элемента, вам не нужно делать [0] и передать его на jQuery снова.

$($(this).parents(':eq(5)').children()[0]).html()

Это лучше:

$(this).parents(':eq(5)').children().eq(0).html();

Хотя jQuery имеет :во-первых-ребенок селектор, который более понятен:

$(this).parents(':eq(5)').find(':first-child').html();

Ссылка

8
ответ дан 13 марта 2011 в 11:03 Источник Поделиться

Если вы не имеете доступа к HTML (где можно назначить идентификатор ребенка), единственный реальный вариант у вас есть:

$(this).parents().eq(5).children().eq(0).html();

если вы намерены иметь доступ к элементу более одного раза, вы могли бы назначить его на нагрузку:

$(document).ready(function(){
window.foo = $(bar).parents().eq(5).children().eq(0);
});
...
foo.html();

зная больше о том, почему вам нужно сделать, пересекая дом, может дать дальнейшие рекомендации.

0
ответ дан 1 апреля 2011 в 09:04 Источник Поделиться