0

我试图在我的页面上搜索一个没有将“当前”属性设置为“当前”的 iframe。

(当前属性在使用 iframe 时设置,并在加载后重置)。

我正在尝试编写代码,以便如果有 1 个或多个 iframe 未设置为当前,则使用其中一个,否则,创建一个新的 iframe,做一些其他的事情并使用新的 iframe,

但是这段代码不太好用,我从不触发“警报”,所以即使我知道我没有未设置“当前”属性的 iframe,我也永远不会进入 ELSE 部分:

var $fi = $visible.find(".file-info");
        thisPreview = {};
        var iframes = $('iframe').filter(function (index) {
                return index == 0 || $('iframe').attr("current") == "no";
              })
        if(iframes.length >0){ //if one of the iframes hasnt got current set as current, use it
            var theSuffix = iframes.attr('id').split('_').pop();
            thisPreview[theSuffix] = $fi.prev(".image-preview");
            $(this).closest(".file-upload-form").children(".variable-hidden").attr('value',theSuffix);
            iframes.attr('current','current');
            $(this).closest('.file-upload-form').attr('target','upload_target_'+theSuffix);
        }
        else{//else, create a new iframe, quick!
            var count = $('[id^="upload_target_"]').length();
            alert(count);
            var countPlus1 = count+1;
            iframe = $('<frame>').attr({'id':'upload_target_'+countPlus1,'name':'upload_target_'+countPlus1,'current':'current'}).addClass('upload-target');
            iframe.appendTo($('#container'));
            thisPreview[countPlus1] = $fi.prev(".image-preview");
            $(this).closest(".file-upload-form").children(".variable-hidden").attr('value',countPlus1);
            $(this).closest('.file-upload-form').attr('target','upload_target_'+countPlus1);

        }
4

3 回答 3

3

index == 0将返回true第一个 iframe,无论它是否具有该属性。

此外,$('iframe').attr("current") == "no";选择所有iframe。你想要当前的:

$(this).attr("current") == "no";

最后,不要编造自己的属性。使用data-前缀:

<div data-stuff="foo"></div>

.data()方法:

$('div').data('stuff') // "foo"
于 2013-02-19T21:38:07.193 回答
0

您可以使用属性不等于选择器

var iframes = $('iframe[current != "current"]')
if (iframes.length > 0) {
    // use old one
} else {
    // create new one
}

JSFiddle用于测试。

于 2013-02-19T21:41:27.233 回答
0

你确定这段代码给出了正确的结果吗?

return index == 0 || $('iframe').attr("current") == "no";

我对退货的使用感到困惑。它会返回“index == 0”的评估还是评估“index == 0”,如果它是假的,那么评估“$('iframe').attr("current") == "no"" ?我认为你希望它做后者,但它似乎模棱两可,它可能不会给你你期望的结果。

于 2013-02-19T21:44:01.327 回答