2012-07-27 32 views
0

我怎麼會去disecting一個id,把這個id="type=2owner=6page=1"這個:用javascript解析id?

var type = "2"; // or what ever is after type= but before owner= 
var owner = "6"; // or what ever is after owner= but before page= 
var page = "1"; // or what ever is after page= 

的數值不會總是相同或單個數字。

+0

它會一直是一個數字嗎?你怎麼知道在2之後停止,並且'owner'不是'pr-type'的一部分? – sachleen 2012-07-27 00:29:05

+2

爲什麼不使用像「數據類型」這樣的屬性來存儲這些值? – V1tOr 2012-07-27 00:29:52

+0

@ V1tOr謝謝 - 我會研究一下 – Mike 2012-07-27 00:32:10

回答

4

可以完成你想要做的事情,但你應該幾乎可以肯定地使用數據屬性。

而是數據打包到您的id屬性,而是使用獨立的data-屬性:

<div id="my-div" data-type="2" data-owner="6" data-page="1" /> 

jQuery的爲您提供了一個非常簡單的語法來訪問一個元素的數據屬性:

$('#my-div').data('type'); // "2" 
$('#my-div').data('owner'); // "6" 
$('#my-div').data('page'); // "1" 

或者改變/添加新的數據屬性:

$('#my-div').data("name", "bob"); // <div .... data-name="bob" /> 

如果您無法添加數據屬性您的標記(如果,例如,你只消費HTML,而不是生成它),你可以使用正則表達式來拉id屬性分開:

var id = "type=2owner=6page=1"; 

id.match(/type=(\d+)/); // ["type=1", "1"] 
id.match(/owner=(\d+)/); // ["owner=6", "6"] 
id.match(/page=(\d+)/); // ["page=2", "2"] 

以上任何一項都將返回一個兩元素數組,其中第二個元素是所討論的數字。

+0

謝謝。這種方法好多了,我沒有離開過這樣的事情。 – Mike 2012-07-27 00:55:45

1
var id = document.getElementById(...).getAttribute("id").split(/=/g); 
var type = id[1]; 
var owner = id[3]; 
var page = id[5]; 
1

你可以嘗試一些更具擴展性的東西。這將創建一個包含所有關鍵字或術語及其值的漂亮對象,並且可以通過更多條款輕鬆擴展。

var id = 'type=2owner=6page=1' 
var terms = ['type', 'owner', 'page'] 
var results = {} 

for (var i = 0, n = terms.length, m, re; i < n; i++) { 
    m = terms[i] 
    re = new RegExp(m + '=(\\d+)', 'i') 
    results[m] = re.exec(id)[1] 
} 

console.log(results) // { type: 2, owner: 6, page: 1 }