【问题标题】:Iterate all elements and change their id迭代所有元素并更改其 id
【发布时间】:2014-08-09 22:45:19
【问题描述】:

我有一个 .jsp 页面,其中许多元素的 id 都以某个字符串结尾。例如:

<div id="topActions-1083"></div>
<div id="collapse-1083">
<input id="collapse1Input-1083" type="hidden" value="expanded"></input>
</div>

获取所有 id 以 '1083' 结尾的元素并将其更改为 '1084' 的最快方法是什么?

【问题讨论】:

标签: jquery html jsp


【解决方案1】:

试试这个

$("[id*=1083]").each(function(){
   var iid = $(this).attr('id')
   var fin = iid.replace('1083','1084')
   $(this).attr('id',fin)
   console.log(fin)
});

Working DEMO

选择器示例

以给定的字符串开头(例如 1083),

$("[id^='1083']")

如果要选择 id 包含给定字符串的元素:

$("[id*='1083']")

如果要选择 id 不是给定字符串的元素:

$("[id!='1083']")

【讨论】:

    【解决方案2】:

    尝试使用.attr()的接收函数,

    $('[id$=1083]').attr('id',function(_,id){ 
        return id.substr(id.length - 4) + '1084'; 
    });
    

    DEMO

    或者正如 wolf 建议的那样,您可以使用 .split() 而不是 .substring()

    $('[id$=1083]').attr("id", function (_, id) {   
       return id.split('-')[0] + '-1084';
    });
    

    【讨论】:

    • 你应该拆分它:$('[id$=1083]').attr("id", function (_, id) { return id.split('-')[0] + '-1084'; });
    • @A.Wolff 是的..这也是一个可能的解决方案..我会包括那个。
    • Wolff 的评论非常有用,因为结尾字符串(此处为“1083”)可能并不总是相同的大小。
    【解决方案3】:

    你可以试试这个:

    脚本

    $(function()
    {
        $('[id$=1083]').prop('id',function()
        {
            return this.id.replace('1083', '1084');
        });
    });
    

    【讨论】: