2014-01-14 4 views
2

Выбор элементов по классам имен прост. Но можно ли выбрать любой элемент DOM, который вообще не имеет набора классов в jQuery? Вид пустого стиля.Выбрать элемент без стиля в jQuery

Пример:

<div class="nope"> 
    <div>You need me!</div> 
</div> 
<span class="foo">Not me</span> 

var answer = $("selector-im-looking-for").text(); // You need me! 

ответ

4

Я хотел бы предложить:

$('div').not('[class]'); 

JS Fiddle demo, обратите внимание, что этот подход не может выбрать <span> элемент (Уместно HTML ниже).

Или, чтобы выбрать все элементы без атрибута класса:

$('body *:not("[class]")') 

JS Fiddle demo, обратите внимание, что это также не может выбрать <span> элемент.

Универсальный селектор (*) подразумевается в случае, если селектор псевдокласса используется без имени тега, но в случае его использования я предпочитаю быть явным, хотя он является необязательным в этом контексте ,

Далее, чтобы выбрать все элементы, в пределах <body>, либо не class атрибута, или с атрибутом класса, но не класса имя-набора:

$('body *').filter(function(){ 
    return !this.className || !this.className.length; 
}) 

JS Fiddle demo, этот подход, потому что он проверяет как отсутствие свойства className, так и пустую/нулевую длину className, успешно находит <span>.

Вышеуказанные демки были использованы при следующем HTML:

<div class="nope"> 
    Some text that should not be selected. 
    <div>You need me!</div> 
</div> 
<span class="foo">Not me</span> 
<span class="">Me too (probably)</span> 

Ссылки:

+0

Tnx! Это селектор, которого я ищу. Я приму это как ответ примерно через 9 минут ... – Andries

+0

Вы очень рад, я рад, что помог! –

2

Вы ожидали следующее?

var answer = $("div").text(); // You need me! 

Или

var answer = $(":not(.nope)").text(); // You need me! 

Редактировать следующее уточнение:

Как это?

var answer = $('div:not([class])'); 
+0

Tnx для вашего ответа. Но Im ищет селектор, который выбирает любые элементы без набора классов. – Andries

+0

См. Мое редактирование, которое не должно соответствовать ни одному классу. –

+0

Tnx, последний был прав, но я могу только принять его. Но, tnx в любом случае! – Andries

1

вы можете использовать фильтр,

$('div').filter(function(){ 
    return $(this).attr('class') === null; 
}).each(function(){ 
    //iterate item 
}) 
+1

Надеюсь, я не причинил вам никакого преступления, но я решил отформатировать ваш ответ (чтобы представить код * как код * и для удобства чтения). Для справки по форматированию (чтобы помочь вам форматировать код как код), пожалуйста, просмотрите страницу справки [Markdown] (http://stackoverflow.com/editing-help/). :) –

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