2016-09-18 3 views
0
<body class="some-class xxx-term-i-want-to-extract some-other-class"> 

Как извлечь «термин-я-хочу к экстракту» из класса тела, зная, что это всегда начинается с «ххх - "?Как извлечь часть класса, начиная с «xxx-» с помощью JQuery

Редактировать: Вопрос о получении «term-i-want-to-extract» и его хранении внутри переменной, например. Не о том, чтобы удалить его из классов тела или вернуть классы тела без него. Спасибо за ваши ответы!

+1

Вы можете рассмотреть другой подход, если вы можете, в котором хранятся данные, как это с помощью '' данных-атрибут, а не встраивание его в имени класса. –

+0

@pim, вы проверили мой ответ? Не забудьте принять, если это правильно. Благодаря! – Dekel

ответ

2

Вы можете использовать classList, чтобы получить список всех классов body тег имеет, а затем используйте функцию $.map, чтобы переместить их и вернуть только соответствующие (после удаления строки xxx-).

var classes = $.map($('body')[0].classList, function(cls, i) { 
 
    if (cls.indexOf('xxx-') === 0) { 
 
    return cls.replace('xxx-', ''); 
 
    } 
 
}) 
 
console.log(classes);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body class="some-class xxx-term-i-want-to-extract some-other-class">

0

Here's a JSfiddle

// get the jQuery element 
var $body = $('body'); 

// get the contents of the `class` attribute 
// and use String#split to divide it into an 
// array of individual class strings 
var classes = $body.attr('class').split(' '); 

// Array#find is used to find the first class 
// that starts with the selected pattern 
// and then the pattern is sliced off of the 
// full class string 
var xxx = classes.find(function (className) { 
    return className.startsWith('xxx-'); 
}).slice(4); 

xxx === 'term-i-want-to-extract'; // true 

Array#find и String#startsWith являются частью спецификации ES2015 и, следовательно, не могут быть доступны на всех платформах. Затем, возможно, придется использовать polyfills в старых браузерах как IE: