Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery从标记元素重置id_Jquery_Html_Reset - Fatal编程技术网

使用jquery从标记元素重置id

使用jquery从标记元素重置id,jquery,html,reset,Jquery,Html,Reset,给定以下html: <div> <div id="element-0"></div> <div id="element-1"></div> <div id="element-2"></div> <input id="element-3"></input> <div id="element-4"></div> <d

给定以下html:

<div>
    <div id="element-0"></div>
    <div id="element-1"></div>
    <div id="element-2"></div>
    <input id="element-3"></input>
    <div id="element-4"></div>
    <div id="element-5"></div>
    <div id="element-6"></div>
</div>

如果删除ID为2和4的元素,我如何重置(如果更容易的话,使用jquery或javascript)所有这些元素的ID,最终结果是:

 <div>
    <div id="element-0"></div>
    <div id="element-1"></div>
    <input id="element-2"></div>
    <div id="element-3"></div>
    <div id="element-4"></div>
</div>

谢谢你的帮助

函数resetIndexes(){
function resetIndexes() {
    var els = $('div *'), i;

    for(i = 0; i < els.length; i++){
        els.eq(i).attr('id', 'element-' + i);
    }
}
变量els=$('div*'),i; 对于(i=0;i

//您的标记在此处出错,请删除
$('#elements').children().each(函数(索引,val){
$(this.attr('id','element-'+索引);
});

其他答案可以,但可能不够可靠@例如,Xander的回答没有考虑其中一个元素是
输入
而不是
div
@密码悖论的答案依赖于封闭的
div
的每个子级都有一个“元素-”ID

要彻底做到这一点,您必须遍历DOM中的所有元素,查看它们的ID是否以“element-”开头,然后相应地更改ID

我首先编写了一个函数来获取所有以“element-”开头的元素:

然后是一个重新排列ID的函数:

function reorderIds() {
  var idx = 0;
  getElements().each( function() {
    $(this).attr( 'id', 'element-' + idx++ );
  } );
}

您可以在这里看到我的JSFIDLE:

这闻起来像是糟糕的设计。您的代码不应期望数字升序。如果您能详细说明您的代码将要做什么,我们可以建议一个更好的替代方案。
function getElements() {
  return $('html').find('*').filter( function() {
    var id = $(this).attr('id');
    return id && id.indexOf( "element-" ) == 0;
  } );
}
function reorderIds() {
  var idx = 0;
  getElements().each( function() {
    $(this).attr( 'id', 'element-' + idx++ );
  } );
}