2012-03-27 2 views
18
var playerClass = $(this).parent().attr('class') 

Вопрос только о выборе конкретного класса из dom.jQuery match regex

Что я могу добавить в эту строку, чтобы выбрать только класс, в котором есть класс игрока-1, игрок-2, в основном что-либо с префиксом игрока, за которым следует номер?

ответ

43

Я не мог точно сказать, что вы просили с вашим вопросом, так что здесь четыре возможности. Надеемся, что один из этих вариантов соответствует тому, что вы намеревались спросить, или вы можете немного изменить один из них, чтобы соответствовать.

Чтобы выбрать все входные элементы с классом player-xx где xx является числом, вы можете сделать это:

var playerClass = $('input[class^="player-"]').filter(function() { 
    return((" " + this.className + " ").match(/\splayer-\d+\s/) != null); 
}); 

Первый селектор JQuery получает любое имя класса, который начинается с "player-". Затем фильтр удаляет все элементы, которые также не являются "player-nn".

Если вы только пытаетесь изучить, содержит ли один конкретный имя_класса player-nn, то вы можете сделать это так:

if ((" " + $(this).parent().attr('class') + " ").match(/\splayer-\d+\s/) != null) { 
    // the parent has player-nn as a class 
} 

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

var matches = (" " + $(this).parent().attr('class') + " ").match(/\s(player-\d+)\s/); 
if (matches) { 
    playerClass = matches[1]; 
} 

Если вы пытаетесь на самом деле получить номер после player-, вы можете сделать это так:

var matches = (" " + $(this).parent().attr('class') + " ").match(/\splayer-(\d+)\s/); 
if (matches) { 
    playerNum = parseInt(matches[1], 10); 
} 

Примечание. Все эти примеры используют трюк (который я узнал из jQuery), что если вы добавите пробел в начало и конец общего имени класса, то вы можете искать заданное имя класса с регулярным выражением, ища ваше собственное имя класса окружено с обеих сторон пробелом. Это гарантирует, что вы не будете соответствовать части более длинного имени класса и только соответствовать целым классам. jQuery использует этот трюк в своей реализации .hasClass().

+0

У меня есть еще один запрос, который вы можете предоставить. Как я могу предоставить дополнительный запрос, чтобы узнать, соответствует ли он также классу «не изображен» вот код, который я использую в настоящее время теперь .. var playerClass = $ (this) .parent(). attr ('class').match (/ \ bplayer- \ S +/g) – Greg

+0

@Greg - если вы просто хотите добавить 'not-pictured' в такое же регулярное выражение, вы можете сделать это следующим образом:' .match (/ \ bplayer- \ S + | не-на фото/г) '. Если это не то, чего вы хотели, то я не понимаю ваш новый вопрос, поэтому, пожалуйста, уточните. – jfriend00

+0

Это нормально работает, хотя он возвращает его запятыми ... player-3, not-pictured Есть ли способ получить «игрок-3 не изображен» – Greg

2

Чтобы выбрать все input элементы, которые имеют имя класса, начиная с "player-", вы могли бы использовать это:

var playerClass = $('input[class^="player-"]'); 

Селектор «стартов с» описан здесь: http://api.jquery.com/attribute-starts-with-selector/

Это не гарантирует, что за «игроком» сразу же следует цифра.

5

Я думаю, что это то, что вам нужно:

var playerClass = $(this).parent().attr('class').match(/player-\d+/);