Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подскажите, плз, по выборке (https://javascript.ru/forum/jquery/5550-podskazhite-plz-po-vyborke.html)

mcpro 22.10.2009 15:22

Подскажите, плз, по выборке
 
Подскажите, плз, почему не работает :help:
$('a[class$=header]')

Вроде простой код, который должен выбирать ссылки с классами, название которых заканчивается на header. А-н не работает :-?

e1f 22.10.2009 15:53

Бред. Так ищется ссылка, атрибут class которой заканчивается на header. Вы уверены, что такие классы -- в конце строки? Вряд ли.
Предлагаю пересмотреть код, и искать так:
$('a').filter('.aheader, .bheader, ..., .zheader')

mcpro 22.10.2009 16:18

Цитата:

Вы уверены, что такие классы -- в конце строки?
Да:)
У меня есть ссылки с классами "header","header up" и "header down". Мне надо выбрать только те, что "header", а "header up" и "header down" не выбирать.

e1f 22.10.2009 16:26

Значит, у Вас так:
<a class="header" >1</a>
<a class="header up" >2</a>
<a class="header down" >3</a>

Вы делаете выборку по ссылкам, у которых атрибут class заканчивается на header. Покажите мне, сколько ссылок тут подходят под это описание

x-yuri 23.10.2009 03:11

названия классов не могут содержать пробел
http://www.w3.org/TR/html401/struct/...tml#adef-class

Riim 23.10.2009 04:22

Но несколько имен перечисляются через пробел.

mcpro 23.10.2009 12:24

совершенно верно. Названия классов не могут содержать пробел. В данном случае у элементов с class="header up" два класса header и up. Мне же надо выбрать элементы, у кот класс ТОЛЬКО header.
Цитата:

Покажите мне, сколько ссылок тут подходят под это описание
Ни одного, т.к. class="..." это не атрибут, а класс. Верно? :write: Тест здан?:)
Вопрос в другом. КАК выбрать элементы, у кот класс ТОЛЬКО header. Неужели ни кто не сталкивался с такой задачей :)

x-yuri 23.10.2009 12:41

Цитата:

Сообщение от mcpro
КАК выбрать элементы, у кот класс ТОЛЬКО header

похоже $('a[class=header]')

Цитата:

Сообщение от mcpro
Неужели ни кто не сталкивался с такой задачей

вообще-то нет, а зачем тебе это понадобилось?

mcpro 23.10.2009 13:15

Цитата:

похоже $('a[class=header]')
надо проверить, но вроде так не работает.
Цитата:

вообще-то нет, а зачем тебе это понадобилось?
гы.. в двух словах не объяснишь )))

x-yuri 23.10.2009 13:23

Цитата:

Сообщение от mcpro
гы.. в двух словах не объяснишь )))

обычно люди ограничиваются "так надо". А ведь можно было бы обсудить... может тебе даже удастся сорвать аплодисменты всего форума в номинации "это удобно, а никто не знает" ;)

mcpro 23.10.2009 13:45

не в номинации "это удобно, а никто не знает" я оваций точно не получу.
Ну тогда так (постараюсь не напутать ни чего)
Есть табличка, к ней подключен джикверевский модуль сортировки.
$("#myTable").tablesorter({
	    headers: { 
            3: { 
                sorter: false 
            }, 
            4: { 
                sorter: false 
            },
            6: { 
                sorter: false 
            }			
		}	
	});

все столбцы имеют стиль "header" по умолчанию. Когда же выбран какой либо столбец то к его стилю прибавляется "up" или "down". Я задумал сделать еще подмену фона при наведении мышки.
$('.mainTable th.header').hover(	
	  function () {
		$(this).css('background-color', '#8dbdd8');
	  },
	  function () {
		$(this).css('background-color', '#e6eeee');
	  }
	);

Все просто. Но есть одно НО. Когда столбец выбран для сортировки, то есть его класс "header up" или "header down" надо чтобы фон при наведении мыши на него НЕ менялся. То есть надо, чтобы вместо $('.mainTable th.header') выбирались только те элементы, у кот класс ТОЛЬКО header.
Вот )
$('a[class=header]') как то странно работает.
По умолчанию сортировка сделана по дате и при на ведении на ней мышки фон не меняется. Вроде все ок. Но если кликнуть на один из столбцов, то на новом столбце для сортировки по прежнему остается подмена фона.

x-yuri 23.10.2009 15:05

live?

e1f 23.10.2009 15:31

Цитата:

То есть надо, чтобы вместо $('.mainTable th.header') выбирались только те элементы, у кот класс ТОЛЬКО header.
Ну Вы же знаете, какие классы могут быть на хидере?
$('.mainTable th.header:not(.up, .down)')

mcpro 23.10.2009 16:34

изменил код на
$('.mainTable th.header:not(.headerSortDown, .headerSortUp)').hover(    
      function () {
        $(this).css('background-color', '#8dbdd8');
      },
      function () {
        $(this).css('background-color', '#e6eeee');
      }
    );

но работает криво.
То есть при загрузки обработчик события только на элементы с классом header вешается. После того как одному из элементов добавляется класс headerSortDown, обработчик с него не убирается.

e1f 23.10.2009 18:51

Логично, не находите? ;)
Обработчик вешается не на некую абстрактную "динамическую коллекцию", а на вполне конкретный набор элементов.
Либо копайте в сторону live, либо как-то так:
$('.mainTable th.header').hover(    
    function () {
        $(this).not('.headerSortDown, .headerSortUp').css('background-color', '#8dbdd8');
    },
    function () {
        $(this).not('.headerSortDown, .headerSortUp').css('background-color', '#e6eeee');
    }
);

mcpro 23.10.2009 20:06

О ))) Спасибо. Получилось. Попробую теперь с Live разобраться.


Часовой пояс GMT +3, время: 19:55.