2012-01-05 2 views
0

У меня есть ячейки заголовка таблицы, которая имеет как форматирование и функциональные классы, например, так:Как выбрать только некоторые классы элемента

<th class="persistent optional some-other-classes"> 

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

Я пытаюсь, но это не поймите меня везде ...

$('th, TH').filter('.persistent, .optional') 

Есть ли способ захватить только эти два класса, не ссылаясь на ? Другой-класс по названию?

Спасибо за помощь!

EDIT: подробнее
Детали будут иметь более 3-х классов. Я только хочу, чтобы скопировать/вставить постоянные и дополнительные классы, обрабатывать таблицы внешний вид, и оставить форматирование классов

Это должно быть что-то вроде:

$('th, TH').attr(class).filter('.persistent, .optional') 

, который не работает, конечно.

+1

Вы имеете в виду предметы, которые имеют * оба класса, за исключением предметов, которые имеют только один из них? –

+0

Мне нужно скопировать ** persistent ** и ** optional ** во все ячейки таблицы ниже. поэтому мой выбор должен быть «выбрать все классы, которые соответствуют постоянным и необязательным». Надеюсь, это было достаточно ясно. – frequent

+0

@ Четко, чтобы быть ясным, вы хотите получить элементы с ** только ** «необязательными» (если есть) и «постоянными» (если есть) классами. Верный? – Viruzzo

ответ

0

После много вмешиваются, это мое решение, которое работает:

var classes = "", 

    allClasses = th.attr("class").split(/\s+/); 

    for (var j = 0; j < allClasses.length; j++) { 
      if (allClasses[j] === 'persistent' || allClasses[j] === 'optional') { 
      classes = classes+" "+allClasses[j] 
      } 
    } 

    console.log(classes) 
    // returns "persistent optional" or "persistent" or "optional" 
    // leaves away all other classes 

Если есть более простой способ отфильтровать эти два класса, я был бы рад дать ответ кому-то.

СПАСИБО за все ваши усилия и жаль, что не рассказал точно, что мне нужно.

+0

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

0

Чтобы выбрать только элементы с классом упорным и необязательными, попробуйте следующее:

$('th[class="persistent optional"], th[class="optional persistent"]') 

Он не будет работать, то это будут дополнительные пространства. Если вам нужно обрабатывать такие случаи проходят функцию фильтра:

$('th').filter(function(){ 
    return this.className.match(/^\s*(persistent\s+optional|optional\s+persistent)\s*$/); 
}) 
+0

Я думаю, что мои вопросы были недостаточно точными. Мне нужно придумать выбор, содержащий имя класса «persistent» и «optional», но не любой другой класс. – frequent

+0

Я отредактировал ответ. Теперь он должен быть более точным. – Krzysztof

0

Для пересечения вам нужно filter('.persistent.optional'), нет места нет запятых.

+0

см. Мой комментарий выше. Мне нужно получить выбор, который содержит только persisten и optional. – frequent

1

Ниже будет соответствовать th элементов, которые имеют либо класс:

$('th.persistent, th.optional'); 

или в соответствии th элементов, которые имеют как:

$('th.persistent.optional'); 

Или, чтобы получить элементы, которые имеют класс только стойкие или только дополнительно или только оба:

$('th.persistent, th.optional').filter(function() { 
    var classes = this.className.split(/\s+/); 
    return classes.length == 1 || (classes.length == 2 && $(this).is('.persistent.optional'); 
}; 

Update

Хорошо, я думаю, я понимаю ваше требование сейчас - если заголовок таблицы .optional все td элементы в столбце также должны иметь .optional класс, аналогично для .persistent:

$('th.persistent, th.optional').each(function() { 
    var th = $(this); 
    var col = th.parent().children().index(th); 
    th.closest('table').find('td').each(function() { 
    var td = $(this); 
    if (td.parent().children().index(td) === col) { 
     if (th.is('.persistent')) td.addClass('persistent'); 
     if (th.is('.optional')) td.addClass('optional'); 
    } 
    }); 
}); 
+0

правильный. Выглядит неплохо. Спасибо! – frequent

0

Вы можете использовать метод addClass() для присвоения имен классов набору ранее согласованных элементов:

$("th").addClass("persistent optional") 
0

Я создал jsfiddle для выбора элементов, содержащих только указанные классы.

http://jsfiddle.net/hYgqS/

здесь образец HTML

<div class="a1 a2 b"> 
1 
</div> 
<div class="a1 a2"> 
2 
</div> 

здесь код JS

$('div.a1.a2').filter(function(){ 
return $(this).attr('class').split(' ').length ==2 
}).text("this one");