2013-08-06 2 views
2

У меня есть на странице несколько div с в видеSub отбор JQuery не работает, как ожидалось

<div id="{{ myId }}" class="typelist"><!-- content goes here --></div> 

Кроме того, есть список «ссылки» в следующем порядке:

<a href="#" onclick="showThis({{ myId }})">{{ myDescriptiveName }}</a> 

корреспондент JS-часть выглядит следующим образом:

function showThis(id) { 
    var divs = $('div.typelist'); 
    divs.hide(); 
    divs.find('#' + id).show(); 
} 

То, что я хочу сделать это, поиск в DIV с идентификатором id в текущем выборе и переключите его на «видимый». Я понял теперь, что find() ищет только детей и «внуков», что объясняет, почему приведенное выше не работает должным образом.

Но, как правильно найти нужный div внутри текущего выбора? Googling не предоставил мне никакой полезной информации.

ответ

4

Это должно быть

function showThis(id) { 
    var divs = $('div.typelist'); 
    divs.hide(); 
    $('#' + id).show(); 
    //or divs.filter('#' + id).show(); 
    //or divs.filter('[id="' + id + '"]').show(); 
} 

при использовании .find(), он ищет потомок divs элементов, но в вашем случае элемент, который вы ищете среди divs элементов.

В этом случае вам нужно использовать .filter() вместо .find(), но так как в этом случае у вас есть идентификатор можно непосредственно использовать id-selector

+0

'filter()' действительно был тем, что я искал. Как @AlexanderScholz подразумевает, что идентификатор должен быть уникальным, но я думал, что у меня уже есть отфильтрованный набор из DOM, поэтому производительность должна быть лучше, если бы я искал это подмножество вместо всего дерева DOM. –

1
function showThis(id) { 
    var divs = $('div.typelist'); 
    divs.hide(); 
    $('#' + id, divs).show(); 
} 

Это выглядит для ID в вашем выборе. Но ваш идентификатор должен быть уникальным. Итак, ответ Аруна Пини - лучший.

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