Javascript 自动DD迟发png脚本

Javascript 自动DD迟发png脚本,javascript,png,Javascript,Png,我已经使用了一段时间,它解决了我最头疼的IE6 png问题 但是我想知道是否有一种方法可以使它自动化,这样我就不会在代码中乱扔class=“png”或使用背景图像将html元素的ID添加到JS文件中。-我真的不在乎这会减慢IE6的速度-向客户解释网站之所以慢是因为他们的浏览器,要比解释为什么所有东西都有灰色背景更容易 我不是一个真正的JS专家,但我想获取src属性并将文件名添加到类中并不困难不知何故,解析CSS和添加包含元素的id听起来很困难,如果不是不可能的话???这没有经过测试,但我的jQu

我已经使用了一段时间,它解决了我最头疼的IE6 png问题

但是我想知道是否有一种方法可以使它自动化,这样我就不会在代码中乱扔class=“png”或使用背景图像将html元素的ID添加到JS文件中。-我真的不在乎这会减慢IE6的速度-向客户解释网站之所以慢是因为他们的浏览器,要比解释为什么所有东西都有灰色背景更容易


我不是一个真正的JS专家,但我想获取src属性并将文件名添加到类中并不困难不知何故,解析CSS和添加包含元素的id听起来很困难,如果不是不可能的话???

这没有经过测试,但我的jQuery解决方案应该可以工作。它基本上检查所有img元素的.png扩展名,然后检查除img之外的所有元素的.png扩展名背景图像

您可能需要添加额外的代码来检查CSS背景属性以及背景图像。有了body*selector,我可以想象在包含大量元素的页面上会有很多开销,但我同意你的看法,如果IE6用户不关心更新浏览器,我不在乎加载页面需要多长时间

$(function() {
    $('img').each(function() {
            if(this.src.split('.').pop() == 'png') {
                    DD_belatedPNG.fixPng(this)
            }
    });
    $('body *:not(img)').each(function() {
            if($(this).css('background-image').split('.').pop().replace(/("|\')\)/,'') == 'png') {
                    DD_belatedPNG.fixPng(this);
            }
    });
});
编辑:我发现这是一个非常有趣的挑战,所以写了一个纯JavaScript解决方案。但是,它需要在DOM就绪时运行,因此如果您确实不想使用jQuery或其他具有DOM就绪功能的框架,则必须使用Dean Edwards的方法,如下所示:

document.write('<script type="text/javascript" id="domready" defer="defer" src="javascript:void(0)"><\/script>');
document.getElementById("domready").onreadystatechange = function() {
    if (this.readyState == "complete") {
        var imgs = document.getElementsByTagName('img')
        for(i=0; i < imgs.length; i++) {
            if(imgs[i].src.toLowerCase().search(/\.png$/) != -1) {
                DD_belatedPNG.fixPng(imgs[i]);
            }
        }

        var children = document.body.getElementsByTagName('*');
        for(i=0; i < children.length; i++) {
            var bg = children[i].currentStyle.backgroundImage;
            if(bg != 'none' && bg.toLowerCase().search(/\.png("|\')?\)$/) != -1) {
                DD_belatedPNG.fixPng(children[i]);
            }
        }
    }
}
document.write(“”);
document.getElementById(“domready”).onreadystatechange=function(){
如果(this.readyState==“完成”){
var imgs=document.getElementsByTagName('img')
对于(i=0;i
谢谢!-下一次我开始一个新项目时,我会检查一下,但这看起来和我所追求的一模一样。如果能开发出一个非jquery的解决方案,那也太好了-这样当项目开始时,你就可以把它扔进去,然后忘掉它。我已经开始使用domAssistant和Selectivizr来完成这项工作,即使我使用的是jquery实际上不需要DomAssistant。再次感谢。再次感谢。我已经测试了jquery版本,它甚至可以使用“background”CSS属性,而不必使用“background image”来回复“。正如预期的那样,使用此选项会有一定的延迟,使每个选择器都无法插入。在一个非常不科学的计算中,在一台运行ie6的计算机上,我发现默认的DD_迟到方式是在10秒时启动,而这大约是17秒。显然,有很多事情会影响到这一点但在我的测试中,由于总是有延迟,至少值得尝试一下。谢谢