2010-06-01 2 views
1

У меня есть элемент div, который содержит UL и UL содержит элементы LI. Один из элементов LI имеет идентификатор номера запаса. Мне нужно выбрать этот ли.jQuery Выбор ребенка UL. Поиск лучшего метода

Вот мой код, который отлично работает. Я просто ищу лучшую реализацию.

$(".block").children("ul").children("#stocknumber") // gets me the li and it works!! 

UPDATE 1:

Пожалуйста, обратите внимание, что идентификаторы не уникальны!

Вот что я придумал:

$(".block").children("ul").find("#stocknumber") 
+0

все, что вы имеете в виду под «идентификаторы не уникальны», вы должны объяснить это, прежде чем я удалю -1 – jAndy

+1

ids ИМЕТЬ быть уникальным. Если нет, ваш HTML-код недействителен. –

+0

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

ответ

2
$(".block > ul > #stocknumber") 

или даже:

$("#stocknumber"); // because every id in your HTML should be unique 
+0

thats хуже из-за производительности – jAndy

+2

Производительность не всегда самая важная вещь. Простота в большинстве случаев важнее. Кроме того, второй - это самый быстрый способ достичь того, чего хочет OP –

+0

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

3
$("#stocknumber"); 

Поскольку идентификаторы уникальны, вы не должны иметь более одного элемента с идентификатор stocknumber на вашей странице.

+0

На самом деле в моем случае идентификатор не уникален! –

+1

В этом случае вы должны переосмыслить свою разметку HTML. Идентификаторы должны быть уникальными по спецификации HTML :-) см. Http://www.w3.org/TR/html401/struct/global.html#h-7.5.2 – richsage

+1

john doe: вы должны сделать все возможное, чтобы ID на странице уникален. – Matt

0

Я думаю, что получил свой ответ, используя метод find.

$(".block").children("ul").find("#stocknumber") 
+1

'find()' медленнее, чем 'children()'. Но примите во внимание все критические замечания: вам нужно сделать эти идентификаторы уникальными. Это приносит неожиданное поведение. Посмотрите на использование классов по идентификаторам. Классы не обязательно должны быть уникальными. – Matt

+0

find() медленнее, чем дети()? Я действительно в это не верю. – jAndy

+1

@jAndy: 'find()' ищет всех потомков.'children()' ищет всех детей .... – Matt

1

Вы должны обязательно выбрать его по его идентификатору напрямую.

$('#stocknumber'); 

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

В этой ситуации, вы должны использовать классы вместо идентификаторов, например:

$(".block").find(".stocknumber"); 

или

$('.stocknumber', '.block'); 

с HTML, как это:

<div class='block'> 
    <ul> 
     <li class='stocknumber'>number</li> 
    </ul> 
</div> 

<div class='block'> 
    <ul> 
     <li class='stocknumber'>number</li> 
    </ul> 
</div> 
+0

Я просто просто понял, что сделал OP, но у вас есть точка, и да, мне нужно его удалить. Спасибо, что уведомил об этом. – Sarfraz

+0

@ Sarfraz - ОК, без обид. :) – user113716

1

$('#stocknumber').

Идентификатор должен быть уникальным для страницы. Вы просто замедляете ситуацию.

+0

Я, возможно, не замедлял работу, так как я получаю элемент DIV из функции из-за некоторой операции сбрасывания. Итак, я получаю только точный элемент DIV. –

1

Если LI имеет идентификатор вобще

$('#stocknumber') 

так Идентификаторы должны быть уникальными в разметке.

Смежные вопросы