2011-12-26 3 views
2

Я только что узнал jQuery за последние два дня, так что я немного новичок в этом.jQuery селекторы, являющиеся темпераментными

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

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

var headerHeight = $('#headerTable').height(); 
$('#selectStart').offset({left: 0, top: headerHeight}); 
.... 
<table id="selectStart" class="selector1"> 
    <tr><td id="sel1Projects" class="selector1"> 
.... 

До сих пор так хорошо. Теперь я хочу сделать так, чтобы, когда пользователь нажимает на a в этой таблице, соответствующая суб-навигационная панель появляется сразу справа от первой навигационной панели. Поэтому я написал две новые таблицы для тестирования:

<table id="selectProjects" id="table2" class="selector2" class="table2"> 
<tr><td id="sel2Project1" class="selector2"> 
.... 
<table id="selectDevelopment" id="table2" class="selector2" class="table2"> 
<tr><td id="sel2Dev1" class="selector2"> 

Но селекторами для них являются настоящая боль в шее. Когда я только что делаю

var select1Width = $('#selectStart').width(); 
$('#selectProjects').offset({left: select1Width, top: headerHeight}); 
$('#selectDevelopment').offset({left: select1Width, top: headerHeight}); 

Он отлично работает; однако это не очень хорошее кодирование. Я должен группировать все похожие таблицы, чтобы я мог размещать их одинаково, а затем показывать только тот, который я хочу, чтобы пользователь видел в то время.

$('.selector2').offset(...) 

работает отлично, насколько выбрать все таблицы, но и ставит все с в том же месте, так как все они имеют один и тот же класс для целей моделирования. Пока, однако, это все, чего я ожидал.

$('.selector2 table').offset(...) 

Я ожидал, что это просто выберет таблицы в этом классе. Он ничего не делал. Есть ли проблема с тем, как я ее печатаю? После некоторого разочарования я добавил второй класс «table2» к каждому из них.

$('#table2').offset(...) 

Все еще ничего. Поэтому я добавил новый класс для них

$('.table2').offset(...) 

Ничего; однако, используя другой класс, который они разделяют, selector2, работает. И это не может быть проблемой, когда вам не нужно выбирать таблицы, потому что, когда я выбирал таблицы отдельно, я получил желаемый результат.

Так что я делаю неправильно и что я не понимаю?

+0

Я не совсем понимаю ваш вопрос. Возможно вам это нужно: $ ("# selectProjects # sel2Project1")? Обратите внимание, что вы не должны использовать один и тот же идентификатор для нескольких элементов. – Fenec

+0

Нет, я не пытаюсь выбрать элементы . Я хочу правильно выровнять таблицы, но jQuery не позволяет мне выбирать их как группу - просто индивидуально. –

+0

Я замечаю, что ваши таблицы имеют два атрибута 'class'. Я не думаю, что это действительно так. Если вы хотите добавить дополнительный класс, добавьте его в существующий атрибут 'class', но отделите его от предыдущего с пробелом. – BoltClock

ответ

1

Вместо $ ('selector2 стол'). Смещение (...)

попробовать этот

$ ('table.selector2'). Offset (...)

+0

Спасибо! Это сработало. Так что же случилось с тем, что я пытался раньше? –

+1

'' '.selector2 table''' дает вам дочерние элементы с классом selector2, которые являются таблицами. '' 'table.selector2''' дает вам таблицы, которые имеют класс selector2. –

0

Вы косяк повторить идентификатор для JQuery ... увидеть, если изменить его решит вашу Prob

+0

Удаление идентификатора «table2» из них ничего не делало. –

+0

как насчет объединения классов? – Toping

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