0

我将如何去剖析一个 id,把它id="type=2owner=6page=1"变成这样:

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=

这些数字并不总是相同或单个数字。

4

3 回答 3

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"]

以上任何一个都将返回一个双元素数组,其中第二个元素是有问题的数字。

于 2012-07-27T00:31:22.623 回答
1
var id = document.getElementById(...).getAttribute("id").split(/=/g);
var type = id[1];
var owner = id[3];
var page = id[5];
于 2012-07-27T00:32:30.283 回答
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 }
于 2012-07-27T00:47:53.250 回答