3

我正在尝试循环.each()css 值。我只知道如何获取索引。小提琴

var pos = $('.sublayer_1 div').css('left');

    function adjustAttempt3() {

        $(".sublayer_1  div").each(function (index) {
             alert(index + ":" + pos);
        });

     }

我想要的想法是保存左侧值,因为当浏览器低于 800 像素时,我编写的 jQuery 代码会更改左侧位置,当浏览器重新调整到 800 像素以上时,我想恢复到默认的左侧值。

仅供参考 css 不是解决方案,因为左值来自数据库并且是动态的。

这就是为什么我试图存储每个左侧位置并在 if 语句中使用它的原因。

这是一些示例 html 代码,请查看 this fiddle了解更多信息。

<div class="sublayer_1">
    <div style="position: absolute; left: 100px;">Coffee</div>
    <div style="position: absolute; left: 300px;">More Coffee</div>
</div>

旁注: 更多关于我的意思是保存原左位置

    if((w) > 800) {
        $Q('#main').css({'margin-top': mar });
        $Q('.sublayer_1 div, .sublayer_1 img').css(pos);
        alert(pos) 
    }
    else { 
        $Q('.sublayer_1 div, .sublayer_1 img').css({'left': w/2});
        $Q('#main').css({'margin-top': w_d + m_d });           
    }

这个 if 语句被包装在一个在 resize 函数中调用的函数中。语句中的变量位于if((w) > 800)函数外部,获取默认值,而 else 语句中的变量位于 resize 函数中,因此它们是动态的。

就实践而言,IDK 评价如何,但它刚刚来到我身边并且有效,但我无法获得每个左值,这就是为什么我问我在上面做了什么。

4

4 回答 4

3

我将通过.data每个元素存储原始 CSS 值:

$(".sublayer_1  div").each(function() {
    $(this).data('origLeft', $(this).css('left'));
});

如果您动态生成 HTML,您甚至不必进行此调用,您可以将值直接存储在 HTML 中:

<div style="position: absolute; left: 100px;" data-orig-left="100px">Coffee</div>

然后您可以稍后通过以下方式获取它:

$(".sublayer_1  div").each(function() {
   var left = $(this).data('origLeft');
});
于 2013-08-20T08:53:08.697 回答
1

内部传递的函数each用于$(this)检索当前元素,然后获取其left值。

function adjustAttempt3() {

     $(".sublayer_1  div").each(function (index) {
         alert(index + ":" + $(this).css("left"));
     });  
}

JsFiddle:http: //jsfiddle.net/vGQXT/6/

于 2013-08-20T08:51:27.113 回答
1

当你说它var pos = $('.sublayer_1 div').css('left');获取left满足选择器的第一个元素的值时,你需要的是在你的each循环中你想要当前循环元素的位置,所以

它应该是

function adjustAttempt3() {
    $(".sublayer_1  div").each(function (index) {
        var pos = $(this).css('left');
        alert(index + ":" + pos);
    });
}


//Attempt 3
adjustAttempt3();

演示:小提琴

于 2013-08-20T08:51:46.127 回答
1

您只获得第一个left位置,div因为您没有迭代获得它。

试试这个:

function adjustAttempt3() {

     $(".sublayer_1").find('div').each(function (index) {
         var pos = $(this).css('left');
         alert(index + ":" + pos);
     });


}

现场示例:http: //jsfiddle.net/vGQXT/3/

于 2013-08-20T08:51:50.737 回答