只获取id / name的单词部分

时间:2015-07-31 02:43:59

标签: javascript jquery

我有一个带有许多后代元素的div元素,所有元素都包含在" word1"形式中的ids,例如:id="moviment1"id="type1"。 我只需要获取这些ID(movimenttype)的书面部分,以便将其名称连接为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"这样的错误。那么,我做错了什么?还有其他想法吗?非常感谢你!

4 个答案:

答案 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 
    });
});

Here is a demo using the above snippet.

答案 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()

等方法更改ID

答案 3 :(得分:0)

试试这个......

var onlyAlphabets = id.split(/(\d)/)[0];