2013-09-29 30 views
0

當一個元素有多個類時,是否有可能在jquery中從模式中獲取類。從多個正則表達式/模式獲取類

例如

<body class="class-a class-b class-c id-1"> 

id-1在運行時是不知道,但我想獲得該類只知道會有一類「ID-」,然後ID的模式。

基本上我想要在上面的例子中返回的數字1。

在這個例子中,我會希望有一個6號返回:

<body class="class-a class-b class-c id-6"> 
+2

不要喲權限修改底層代碼?數據屬性會好得多。類似於'data-id =「6」'。 –

+0

不幸的不是。這是一個恥辱,因爲我同意這將是一個更好的方法 –

回答

0
var klass = document.body.className.match(/\bid\-\d+/)[0]; 

FIDDLE

得到的只是在最後,你可以做數量:

var numb = klass.split('-').pop(); 

但如果你甚至不確定是否會有一個數字或一個班級,你應該做一些錯誤哈ndling還有:

klass = klass.length ? klass[0].indexOf('-') ? klass[0].split('-').pop() : null : null; 
+0

可能需要在'\ d'上用'+'來表示多位數字。 –

+0

@JamesMontagne--對此不太確定,我最初爲兩位數字添加了{2},但刪除了它,因爲問題只提到了一位數字,但我將添加+,因爲這樣可以以任何方式工作。 – adeneo

0

您可以.attr('class')標籤

$('body').attr('class') 

然後返回班檢查,如果發現匹配,你可以申請你的正則表達式

/\s+id\-(\d+)\s+/.exec($('body').attr('class')) 

,所需身份證號碼將在返回的陣列的位置1

+0

您的答案也將與'void-1'類匹配。你需要檢查一個字的邊界。 – Barmar

+0

你是對的,編輯。 –

0

也許類似於thi S'它會使用一個ID,而不是一個類,我認爲這可能有點「更清潔」。

HTML:

<div class="class-a class-b class-c" id="item-6"></div> 

JS:

var $item = $('.class-a.class-b.class-c'); 
var number = parseInt($item[0].id.substring(5), 10); 
console.log(number); 

小提琴:http://jsfiddle.net/S8vRr/

它得到與該類模式的所有元素,則提取從第一個元素的id的整數該集。

編輯:剛剛閱讀您對OP的評論;好像你不能設置任何ID。這個答案可能在理論上起到了作用,但不幸的是您的情況並非如此。

0

假設你必須應用到你可以使用body元素至多一個id-...類:

var classData = document.body.className.match(/\bid\-\d+\b/), 
    numberData = classData && classData[0].substring(3); 

numberDatanull如果不存在這樣的匹配。