0

所以这是我的问题,我使用 .removeAttr() 作为禁用内联样式的解决方法,现在有一个实例需要恢复我已删除的属性。还有可能吗?或者你能建议我使用什么替代解决方案。

我的 removeAttr() 的触发器是来自我的浏览器的媒体查询。当浏览器调整大小时,dom中元素的位置也会改变。默认情况下,我的 html 有一个正在使用的内联样式。但是当它缩小时,它应该将元素移动到不同的位置,当它恢复到原始比例或更宽的视图时,它也应该恢复删除的属性。

var delay = (function(){
    var timer = 0;
    return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

jQuery(function() {

    var pause = 100; // will only process code within delay(function() { ... }) every 100ms.

    jQuery(window).resize(function() {

        delay(function() {

            var width = jQuery(window).width();

            if( width >= 958 && width <= 1400 ) {
                if(jQuery(".box1 #move_me").length == 0) {
                    // needs to restore the removed "style" attribute
                    jQuery("#move_me").appendTo(jQuery(".box1"));
                }
            } else if( width >= 768 && width <= 959 ) {

            } else if( width >= 480 && width <= 767 ) {
               jQuery("#move_me").insertAfter(".box2 .insert_below").removeAttr("style");
            } else if( width <= 479 ) {
               jQuery("#move_me").insertAfter(".box3 .insert_below").removeAttr("style");
            }

        }, pause );

    });

    jQuery(window).resize();

});

jsfiddle: http: //jsfiddle.net/EFzy7/embedded/result/(调整大小以查看更改) - 如果您注意到,默认情况下如果您在更宽的屏幕中(例如,高于 960 像素或 1200 像素),“hello world”应该是红色的并且是arial字体。当您调整大小时,它会移动到另一个 div/box。但是,当您将其调整回宽屏幕时,文本不在其原始外观(红色宋体)中。

有没有办法可以恢复已删除的属性?如果不是,您认为解决我的问题的方法是什么?

谢谢你。

4

2 回答 2

1

一种方法是在删除元素(或某些元素甚至文档)之前为其提供样式的数据值。然后你可以稍后通过该数据回忆起这种风格。

像这样:

 jQuery("#move_me")
      .insertAfter(".box2 .insert_below")
      .data("reStyle", jQuery("#move_me").attr("style"))
      .removeAttr("style").removeAttr("style")

然后后来:

 jQuery("#move_me").attr("style", jQuery("#move_me").data("reStyle"))

例子

于 2013-06-17T18:26:56.233 回答
0

最简单的方法是使用 CSS 类,但由于您无法操作标记。我只是将样式作为字符串存储在变量中。

因此,要获取样式,请使用var divStyle = $("#move_me).attr("style");删除属性,然后使用$("move_me").attr("style",divStyle);.

于 2013-06-17T18:28:24.003 回答