我有一个带有许多后代元素的div元素,所有元素都包含在" word1"形式中的ids,例如:id="moviment1"
或id="type1"
。
我只需要获取这些ID(moviment
或type
)的书面部分,以便将其名称连接为1(id="moviment2"
或id="type2"
)。
$clone.find('*').each(function() {
var id = $(this).prop('id');
var num = parseInt( $(this).prop("id").match(/\d+/g), 10 ) +1;
$(this).prop('id', id+num);
});
就这样,我总是得到像id="moviment12"
这样的ids。我已经尝试过了:
var id = $(this).prop('id').replace(/\d+/g, '');
或
var id = $(this).prop('id').match(/\w+/);
但我总是遇到像"cannot read property 'replace'/'match' of undefined"
这样的错误。那么,我做错了什么?还有其他想法吗?非常感谢你!
答案 0 :(得分:1)
理想情况下,您应该使用模板。遍历和修改已解析的元素会使代码变得缓慢且难以维护。
如果要将ID的数字部分增加1,可以使用replace
方法回调函数:
$clone.find('[id]').prop('id', function(_, id) {
// Assuming `id` is `test_25_segment`
return id.replace(/(\d+)/, function(num) {
// |
// --- is 25
return +num + 1;
// |
// --- parses the matching string into integer
});
});
答案 1 :(得分:1)
最简单的方法是,您可以将这些值添加为data-attr
:
<div id="type1" data-id="1" data-text="type"></div>
因此,只需使用.data('id')
和.data('text')
即可轻松将它们分开。
答案 2 :(得分:1)
您可以通过以下方式选择元素:
var all = [].filter.call(document.querySelectorAll('[id*=type]'), function(el) {
return (/\btype\d+\b/).test(el.id);
});
然后您可以使用replace()
答案 3 :(得分:0)
试试这个......
var onlyAlphabets = id.split(/(\d)/)[0];