Javascript 是否有一种方法可以异步重新显示具有原始CSS格式的元素?

Javascript 是否有一种方法可以异步重新显示具有原始CSS格式的元素?,javascript,html,css,Javascript,Html,Css,比如说, <html> <body> <img id="pic" src="original.jpg"/> </body> </html> 现在,有没有一种方法可以将#pic的src重置为original.jpg,而不显式地将其设置为$(“#pic”).attr(“src”,“original.jpg”)?否,由于您已经更改了DOM,因此无法在不重新分配它的情况下进行重置 但如果使用附加类,则可以使用.removeClass重置该类

比如说,

<html>
<body>
<img id="pic" src="original.jpg"/>
</body>
</html>

现在,有没有一种方法可以将
#pic
的src重置为
original.jpg
,而不显式地将其设置为
$(“#pic”).attr(“src”,“original.jpg”)

否,由于您已经更改了DOM,因此无法在不重新分配它的情况下进行重置

但如果使用附加类,则可以使用.removeClass重置该类

现在,有没有办法重置照片 src到original.jpg,不显式 设置为

我认为没有,您是在DOM中完成所有操作的,您无法撤消更改。但是,可以在脚本顶部使用具有原始默认值的变量,并使用这些变量将元素重置为原始值。例如:

<script>
var orig_image = 'original.jpg'; // top level variable

$(function(){
  $("#pic").attr("src","newpic.jpg");
});

// later on you show the original one
$('selector').click(function(){
  $("#pic").attr("src",orig_image);
});

</script>

您可以先获取所有样式,然后执行任意操作,然后获取所有样式,然后比较两个数组。以下是一些让您开始学习的内容:

所有样式的数组:

            var allStyles = ["azimuth","background" ,"backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderBottom","borderBottomColor","borderBottomStyle","borderBottomWidth","borderCollapse","borderColor","borderLeft","borderLeftColor","borderLeftStyle","borderLeftWidth","borderRight","borderRightColor","borderRightStyle","borderRightWidth","borderSpacing","borderStyle","borderTop","borderTopColor","borderTopStyle","borderTopWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cssFloat","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginBottom","marginLeft","marginRight","marginTop","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingBottom","paddingLeft","paddingRight","paddingTop","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"];
下面是一个jQuery循环,它在与另一个的值进行比较后吐出值(在我的例子中,$other是另一个dom元素,但代码可能非常相似。您需要稍微编辑一下:

        // Now we loop through each property, and report those defined
        $.each(allStyles, function(key, value){
            if ($this.css(value) !== undefined){
                if (($other.css(value) !== undefined) && ($this.css(value) !== $other.css(value))){
                    $("#jsStylesA").append("<li><span class='property'>"+value+"</span>: <span class='value'>"+$this.css(value)+"</span></li>");
                }
                else {
                    $("#jsStylesB").append("<li><span class='property'>"+value+"</span>: <span class='value'>"+$this.css(value)+"</span></li>");
                }
            }
        });
//现在我们循环遍历每个属性,并报告已定义的属性
$.each(所有样式、函数(键、值){
if($this.css(值)!==未定义){
if($other.css(value)!==未定义)&($this.css(value)!==$other.css(value))){
$(“#jstylesa”).append(“
  • ”+value+”:“+$this.css(value)+“
  • ”); } 否则{ $(“#jsStylesB”)。追加(“
  • ”+value+”:“+$this.css(value)+”
  • ”); } } });

    你觉得你能从这里拿走吗?

    也许是这样的吧

    $.extend({
      tempcss: function(prop, val) {
        var props = $(this).data('tempcss') || [];
        props.push([prop, $(this).css(prop)]);
        $(this).css(prop, val);
      },
      revertcss: function() {
        var props = $(this).data('tempcss') || [];
        props.each(function(i, prop) {
          $(this).css(prop[0], prop[1]);
        });
      }
    });
    

    它会有一些边缘情况,很明显,您的原始示例不是css属性。但是。

    另一种方法是像这样使用$.data

    $(function() {
        $('body').data('original_image', $('#pic').attr('src'));
        $('#pic').attr('src', 'test.jpg');
    });
    
    要还原原始数据,请读取数据:

    $('#pic').attr('src', $('body').data('original_image'));
    

    很可能是最好的解决方案。rofl。在确定问题的真正要点方面做得很好。
    $(function() {
        $('body').data('original_image', $('#pic').attr('src'));
        $('#pic').attr('src', 'test.jpg');
    });
    
    $('#pic').attr('src', $('body').data('original_image'));