假设我有一个这样的列表:
<ul id="items">
<li id="item_1_dish">Item 1</li>
<li id="item_2_dish">Item 2</li>
<li id="item_3_dish">Item 3</li>
</ul>
我只需要从ID中检索号码。到目前为止,我一直在使用以下内容:
function getNum(element, attrPrefix){
//set prefix, get number
var prefix = attrPrefix;
var num = element.attr("id").substring((prefix.length));
return num;
}
function updateDish(field) {
var num = getNum($(field), "item_");
//Rest of function ...
console.log("Number = " + num);// 1_dish, 2_dish, 3_dish
}
这回归1_dish,2_dish,3_dish等等。
我想用这个:
function getNum() {
var num = /\d+(?=\D*$)/.exec($("element").attr('id'));
return num;
}
function updateDish(field) {
var num = getNum($(field), "item_");
//Rest of function ...
console.log("Number = " + num); //null
}
阅读这篇文章后会回复我需要的内容:Jquery: Getting the number from ID,不幸的是我得到'null'而不是我要求的数字。
我的ID实际上看起来像“_bc_inventorybundle_menu_product_0_dish”我只是为了示例目的缩短了它们。
感谢所有快速回复。我接受了接受的答案,因为它最接近我已经拥有的答案。
答案 0 :(得分:3)
您可以解析字符串,以便在删除前缀后只获取数字:
var num = parseInt(element.attr("id").substring((prefix.length)));
答案 1 :(得分:2)
您可以使用数据属性吗?
而不是解析字符串<li id="item_1_dish" data-id="1">Item 1</li>
如果element
是jQuery对象,则访问它:
var id = parseInt($element.data('id'));
或element
是HTMLElement
:
var id = parseInt(element.dataset.id);
答案 2 :(得分:2)
您可以通过使用.split()方法将ID字符串扩展为数组来实现此目的。例如:
$(".items > li").each(function() {
number = $(this).attr("id").split("_"); // ex: number = ["item","1","dish"];
return number[1]; // you get number from array since its index is 1
}
答案 3 :(得分:1)
function getNum(element)
{
var elemId = element.attr("id");
var fIndex = elemId.indexOf('_');
var lIndex = elemId.lastIndexOf('_');
return elemId.substring(fIndex + 1, lIndex);
}
或强>
function getNum(element)
{
var r = new RegExp(/item_([0-9]+)_dish/);
if(r.test(element.attr("id")) === true)
{
return (r.exec(element.attr("id"))[1]);
}
}
答案 4 :(得分:1)
虽然我会推荐@DrewNoakes实现的想法(使用data
属性),但这应该有效:
function getNum(id){
var num = id.replace(/.*_(\d+)_.*/, '$1');
return num;
}
function updateDish(field) { // field is an HTMLElement, not a jQuery object
var num = getNum(field.id);
//Rest of function ...
console.log("Number = " + num);// 1, 2, 3
}
答案 5 :(得分:1)
如果id的格式始终如此,那么只需将它们拆分为_
字符,然后选择结果数组的第二个元素。像这样:
function getNum(element){
return element.getAttribute("id").split("_")[1];
}
split()
方法根据您指定的字符将字符串转换为数组,并使用[1]指定我们希望该数组的第二个(编号从0开始)元素,即你想要的数字。但是,要小心,因为返回的值是字符串,而不是数字。如果您想要一个不是字符串的数字,请使用parseInt()
。