Есть ли способ в jQuery, чтобы пройти через или присвоить массиву все классы, которые назначены элементу?
ех.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Я буду искать "специальный" класс, как в "dolor_spec" выше. Я знаю, что мог бы использовать hasClass (), но фактическое имя класса не обязательно будет известно в то время.
javascript
jquery
html
Buggabill
источник
источник
Ответы:
Вы можете использовать,
document.getElementById('divId').className.split(/\s+/);
чтобы получить массив имен классов.Затем вы можете повторить и найти тот, который вы хотите.
JQuery не очень помогает вам здесь ...
источник
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Почему никто не просто перечислил.
РЕДАКТИРОВАТЬ: Как @MarkAmery указывает, вы не можете просто
.split(' ')
потому, что имена классов могут быть разделены любым пробелом.источник
$('<div class="foo bar baz">').attr("class").split(' ')
в консоль браузера (там есть символ табуляции); вы получите["foo", "bar baz"]
вместо правильного списка классов["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, вы бы получили массив с пустыми строковыми элементами.При поддержке браузеров вы можете использовать
classList
свойство элементов DOM .Это массивоподобный объект, в котором перечислены все классы элемента.
Если вам требуется поддержка старых версий браузера, которые не поддерживают это
classList
свойство, связанная страница MDN также содержит для него оболочку - хотя даже эта оболочка не будет работать в версиях Internet Explorer ниже IE 8.источник
.classList
не является истинным массивом, и такие методы, которые.indexOf(⋯)
не работают с ним. Это только «массивоподобный объект», тогда как.className.split(/\s+/).indexOf(⋯)
(из принятого ответа) работает.Array
использование[...iterable]
илиArray.from(iterable)
Вот плагин jQuery, который будет возвращать массив всех классов, которые имеют соответствующие элементы
Используйте это как
В вашем случае возвращается
Вы также можете передать функцию в метод, который будет вызываться в каждом классе
Вот jsFiddle, который я настроил для демонстрации и тестирования http://jsfiddle.net/GD8Qn/8/
Минимизированный Javascript
источник
Вы должны попробовать это:
Возвращает массив всех текущих классов элемента.
источник
.classList
является решение - вам просто нужно обратить внимание на несоответствия и / или отсутствие поддержки браузера ...classList
он работает довольно хорошо в современных браузерахclassList
свойство не работает в IE 10/11 для элементов SVG (хотя оно работает для элементов HTML). См developer.mozilla.org/en-US/docs/Web/API/Element/classListисточник
Обновить:
Как правильно заметил @Ryan Leonard, мой ответ на самом деле не фиксирует точку, в которой я себя проявил ... Вам нужно как обрезать, так и удалить двойные пробелы с помощью (например) string.replace (/ + / g, "") Или вы можете разделить el.className, а затем удалить пустые значения с помощью (например) arr.filter (Boolean).
или более современный
Старый:
Со всеми приведенными ответами вы никогда не должны забывать пользователя .trim () (или $ .trim ())
Поскольку классы добавляются и удаляются, может случиться так, что между строкой класса будет несколько пробелов, например, 'class1 class2 class3' ..
Это превратится в ['class1', 'class2', '', '', '', 'class3'] ..
Когда вы используете обрезку, удаляются все несколько пробелов.
источник
.classList
это гораздо более чистый подход!источник
.map
; используйте,.each
если вам не нужно.map
возвращаемое значение. Разделение по пробелам, а не пробелам, также нарушено - см. Мой комментарий на stackoverflow.com/a/10159062/1709587 . Даже если ни один из этих пунктов не был правдой, это не добавляет ничего нового на страницу. -1!Возможно, это тоже поможет вам. Я использовал эту функцию, чтобы получить классы детского элемента ..
В вашем случае вы хотите класс doler_ipsum, который вы можете сделать сейчас
calsses[2];
.источник
Спасибо за это - у меня была похожая проблема, так как я пытаюсь программно связать объекты с иерархическими именами классов, даже если эти имена не обязательно будут известны моему сценарию.
В моем сценарии я хочу, чтобы
<a>
тег включал / выключал текст справки, задавая<a>
тег[some_class]
плюс классtoggle
, а затем присваивая тексту справки класс[some_class]_toggle
. Этот код успешно находит связанные элементы, используя jQuery:источник
Попробуй это. Это даст вам имена всех классов из всех элементов документа.
});
Вот рабочий пример: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
источник
У меня была похожая проблема для элемента типа image. Мне нужно было проверить, был ли элемент определенного класса. Сначала я попробовал с:
но я получил хороший "эта функция недоступна для этого элемента".
Затем я проверил свой элемент в DOM Explorer и увидел очень хороший атрибут, который я мог использовать: className. Он содержал имена всех классов моего элемента, разделенных пробелами.
Как только вы получите это, просто разделите строку как обычно.
В моем случае это сработало:
Я предполагаю, что это будет работать с другими видами элементов (кроме img).
Надеюсь, поможет.
источник
javascript предоставляет атрибут classList для элемента узла в dom. Просто используя
вернет объект формы
Объект имеет функции, такие как содержит, добавлять, удалять, которые вы можете использовать
источник
Немного поздно, но использование функции exte () позволяет вам вызывать hasClass () для любого элемента, например:
var hasClass = $('#divId').hasClass('someClass');
источник
Вопрос в том, для чего предназначен Jquery.
И почему никто не дал .find () в качестве ответа?
Существует также classList для браузеров не IE:
источник
Вот, пожалуйста , просто подправил ответ readsquare , чтобы вернуть массив всех классов:
Передайте элемент jQuery в функцию, чтобы пример вызова был:
источник
$(elem).attr('class').split(/\s+/)
делает это. Может быть, я ошибаюсь, но не вижу смысла перебирать коллекцию, копировать содержимое в новую коллекцию и возвращать эту новую коллекцию.Я знаю, что это старый вопрос, но все же.
Если вы хотите манипулировать элементом
Если вы хотите проверить, есть ли у элемента класс
если несколько классов
источник