Jquery 在父div内获取div类ID并转换为数组?难对付的东西?

Jquery 在父div内获取div类ID并转换为数组?难对付的东西?,jquery,arrays,Jquery,Arrays,所以我在过去的3天里一直在做这个,对.map函数不太熟悉。我试图做的是(查找或获取)父div中div上指定类的所有id onclick。。。示例如下: <div id="parentDiv"> <div class="fetch" id="post1" rel="1"></div> <div class="fetch" id="post2" rel="2"></div> <div class="fetch"

所以我在过去的3天里一直在做这个,对.map函数不太熟悉。我试图做的是(查找或获取)父div中div上指定类的所有id onclick。。。示例如下:

<div id="parentDiv">
    <div class="fetch" id="post1" rel="1"></div>
    <div class="fetch" id="post2" rel="2"></div>
    <div class="fetch" id="post3" rel="3"></div>
    <div class="fetch" id="post4" rel="4"></div>
    <div class="fetch" id="post5" rel="5"></div>
</div>
我还编写了这个小片段,但仍然无法正常工作:

$("div.fetch").each(function(id, value) {
console.log('div.fetch' + id + ':' + $(this).attr('rel'));
var statusId = $(this).attr('rel').serializeArray();
alert(statusId);

        if ( $.inArray( id , statusID ) ) {
            $createTab = 'nope';

        } else {
            $createTab = 'yup';
        }
});
我遇到的问题是它没有阻止.map函数找到的id。。。不切换回它并阻止打开其他新id

我希望我提供了足够的信息来解释我的问题

我已经用我在我的网站上编码的方式更新了这个结构

var getDivIDS = function(papadiv) {
    var div_ids = [];
    papadiv.find('>div').each(function() {
        div_ids.push($(this).attr('id'));
    });
    return div_ids;
}

var mydivids = getDivIDS($('#parentdiv'));
如果我正确理解了您的问题,那么将返回元素中所有第一个子div的id列表

然而,我并不完全理解你对目标的解释,我觉得可能有比这样做更好的解决方案

编辑: 好的,如果我理解正确:

var doAction(id) {
    $('#parentDiv div.selected').removeClass('selected'); //If using a selected class else ignore this line
    if ($('#'+id).length) {
        $('#'+id).addClass('selected'); //or .show() or .highlight() found it as existing
    } else {
        $('#parentDiv').append($('<div><\/div>', {'class': 'fetch', id: id})); //Not found make a new one
    }
}

//Inside click or wherever
doAction(id_to_look_for);
var-doAction(id){
$('#parentDiv div.selected').removeClass('selected');//如果使用所选类,请忽略此行
如果($('#'+id).length){
$('#'+id).addClass('selected');//或.show()或.highlight()发现它已存在
}否则{
$('#parentDiv')。追加($('',{'class':'fetch',id:id}));//未找到创建新的
}
}
//在内部单击或在任何位置单击
doAction(从id到查找);

这就是你要找的吗

不太清楚你想做什么,但是也许我确实明白了:

HTML:

<div id="parentDiv">
    <div class="fetch" id="post346">asdf</div>
    <div class="fetch" id="post21">asdf</div>
    <div class="fetch" id="post471">asdf</div>
    <div class="fetch" id="post32">asdf</div>
    <div class="fetch" id="post178">asdf</div>
</div>
var regex = /\d+$/,
    IDs = $('#parentDiv .fetch').toArray().map(function(e){
        return parseInt(e.id.match(regex));
    });

// now let's say you want to add these divs: 346 ,232, 178
var divsToCreate = [346,232,178];

$.each(divsToCreate, function(i,e)
{
    if ( $.inArray(e, IDs) != -1 )
        $('#post' + e).addClass('selected');
    else
        $('#parentDiv').append($('<div />', {
            class: 'fetch',
            id: 'post' + e,
            text: e
        }));
});

asdf
asdf
asdf
asdf
asdf
Javascript:

<div id="parentDiv">
    <div class="fetch" id="post346">asdf</div>
    <div class="fetch" id="post21">asdf</div>
    <div class="fetch" id="post471">asdf</div>
    <div class="fetch" id="post32">asdf</div>
    <div class="fetch" id="post178">asdf</div>
</div>
var regex = /\d+$/,
    IDs = $('#parentDiv .fetch').toArray().map(function(e){
        return parseInt(e.id.match(regex));
    });

// now let's say you want to add these divs: 346 ,232, 178
var divsToCreate = [346,232,178];

$.each(divsToCreate, function(i,e)
{
    if ( $.inArray(e, IDs) != -1 )
        $('#post' + e).addClass('selected');
    else
        $('#parentDiv').append($('<div />', {
            class: 'fetch',
            id: 'post' + e,
            text: e
        }));
});
var regex=/\d+$/,
IDs=$('#parentDiv.fetch').toArray().map(函数(e){
返回parseInt(e.id.match(regex));
});
//现在假设您要添加这些div:346232178
var divsToCreate=[346232178];
$.each(divsToCreate,function(i,e)
{
如果($.INARAY(e,ID)!=-1)
$('#post'+e).addClass('selected');
其他的
$('#parentDiv')。追加($(''){
类:“获取”,
id:'邮政'+e,
案文:e
}));
});


注意:IDs不能以数字开头:

我有一个函数,可以在#parentDiv中打开新的div,如果该id已经打开,我将尝试使用class=“fetch”再次检查divs,如果已经打开,则选择该id#,如果没有,则使用class=“fetch”打开新的div和相应的id#。您不断为循环中的每个步骤重置
$createDiv
的值。这是预期的结果吗?是的。。。如果id#在数组中,则不应打开新的div并突出显示打开的id#。。。如果没有,那么它会在#parentDiv中创建一个新div,class=“fetch”id=“6”之类!它是怎么做到的?您似乎对
.map
功能不太熟悉!我想让这个过程尽可能快和简单。我认为。每个命令在这里可能都最有效?谢谢dennmat。我有这个div id=“parentDiv”。。。我希望能够在“parentDiv”中使用class=“fetch”id=“?”打开多个div。单击打开新div的链接后,我需要检查该id是否已经存在(已打开),如果已经存在,请选择该div。。。如果没有,那么打开新的分区。这对我来说是一项复杂的任务(更新了我的帖子,希望这就是你想要的。嘿,dennmat,你要如何更新你发布的最后一个函数来使用rel属性?不知道你的意思,比如?
$('a.someclass')。单击(函数(e){e.preventDefault();doAction($(this.attr('rel');)
我想你指的是锚点上设置的rel属性?不,我在使用div的rel属性来检查ID!:)它确实有效…不是犹太教式的?我永远不会在实践中建议它,但它在FF和Chrome中有效(只是尝试过),我想像IE6这样的旧浏览器会阻塞吗?(嗯,是的,它确实存在,我相信这应该是因为这将是一个可怕的做法。但事实是,你可以在FF和Chrome中无错误地完成它(没有测试任何其他)。是的!我不关心IE6…事实上,我阻止用户使用IE6…看在皮特的份上,这是2011年!)IE7和IE8都能工作!不确定是否需要数组,但是如果你使用这段代码,当前返回的数组在9点后将无法工作,它将运行7,8,9,0,1,2,3…7,8,9,0,1,2,3等…而不是substr,我建议:
return/^[a-zA-Z]*([0-9]+)$/.exec(e.id)[0];
也许将正则表达式存储在函数外部,这样它就不会每次都被重新编译。@All:我已经用正则表达式更新了我的答案,这样你就可以有9篇以上的文章了。