Ответ 1
if ($(jRow).attr('class').indexOf('IN-') !== 1)
{jRow.attr( "class", "OUT-foo" );}
else
{jRow.attr( "class", "IN-foo");}
Я пытаюсь написать инструкцию if/else в JQuery, которая может изменить класс элемента, сопоставляя "IN" или "OUT" (в данном случае).
Например, у меня есть несколько <DIV>
с class='IN-something'
OR class='OUT-something'
.
Ниже будет работать, если бы я знал точный CSS-класс, но все, что я буду знать, это то, что он содержит "IN" или "OUT".
Так что-то вроде этого:
if ($(jRow).hasClass('IN-*'))
{jRow.attr( "class", "OUT-foo" );}
else
{jRow.attr( "class", "IN-foo");}
Идеи? Спасибо!
if ($(jRow).attr('class').indexOf('IN-') !== 1)
{jRow.attr( "class", "OUT-foo" );}
else
{jRow.attr( "class", "IN-foo");}
Вы можете использовать attribute-contains-prefix-selector
(docs), если это будет все значение класса (или, по крайней мере, это первый класс).
if ($(jRow).is('[class |= IN]')) {
Здесь также используется метод is()
(docs), чтобы узнать, jRow
является совпадением.
Нажмите здесь, чтобы протестировать рабочий пример. (jsFiddle)
EDIT:
Если вы считаете, что не знаете, что такое foo
, и вам нужно его сохранить, я бы сделал что-то вроде этого:
jRow.attr('class', function(i,cls) {
return cls.indexOf('IN') > -1 ? cls.replace('IN','OUT') : cls.replace('OUT','IN');
});
Вы можете передать функцию в качестве второго аргумента в attr()
(docs). Эта функция имеет 2 параметра. Первый - текущий индекс в итерации. Второй - текущее значение атрибута.
Возвращаемое значение - это значение, которое будет установлено.
Используйте данные jQuery для хранения "IN" или "OUT" или добавьте собственный атрибут с соответствующим именем бизнес-логики, в котором указано "IN" или "OUT". Настоящая проблема заключается в объединении классов.
Вы также можете разбить IN
и OUT
и использовать несколько классов.
<tr class = "IN foo"/>
if( $obj.hasClass("in") ){ $obj.removeClass("in").addClass("out") }
var class = $(jRow).attr('class');
if (class.search("IN\-.*")) {
jRow.attr( "class", "OUT-foo" );
}
else {
jRow.attr( "class", "IN-foo");
}