2012-07-27 64 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 }