阻止加载DOM对象

时间:2012-02-13 20:39:30

标签: javascript jquery html5

我知道可以将display属性设置为“none”并用jquery切换它,但最终仍然加载了对象,只是没有显示。有没有办法防止元素被加载以节省加载时间?我使用下面的代码来切换css属性,但我希望它根本不加载元素。

JS

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
if(isAndroid) {
    $(".startb").css({"display":"inline-block"});
    $(".flashObj").css({"display":"none"});
}
else {
    $(".startb").css({"display":"none"});
    $(".flashObj").css({"display":"inline-block"});
}

我的元素

<div class="startb"><a href="Audio/004_IAM_God_is_Love.mp3"><img src="dbs/images/start.png" width="40" height="40" /></a></div>

<div class="flashObj"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="200" height="20">
            <param name="movie" value="dbs/js/singlemp3player.swf?file=Audio/004_IAM_God_is_Love.mp3&autoStart=false&backColor=000000&frontColor=ffffff&songVolume=90" />
            <param name="wmode" value="transparent" />
            <embed wmode="transparent" width="200" height="20" src="dbs/js/singlemp3player.swf?file=Audio/004_IAM_God_is_Love.mp3&autoStart=false&backColor=000000&frontColor=ffffff&songVolume=90"
            type="application/x-shockwave-flash" />
            </object></div>

8 个答案:

答案 0 :(得分:4)

不要将元素放在页面上并在需要时创建它。

如果你在html中有一个html元素,那么它已经存在了。这不应该是一个很大的开销,除非你有很多版本的元素。

答案 1 :(得分:2)

将它放在你的html文件的末尾:

<script type="text/template" id="myContent">
    <div>content</div>
</script>

然后追加这样的元素:

$('#myContent').appendTo('body');

通过此,您将节省元素渲染的时间。但是你还是要下载html。 另一种方法是通过AJAX下载内容。

答案 2 :(得分:1)

您可以从页面中删除它:

$(".startb").remove();

但它仍会被加载然后删除 所以不要在不需要时删除它,而是在需要时创建它......

答案 3 :(得分:0)

没有

无论你做什么,某些元素都会加载。

var img = document.createElement('img');
img.onerror = function () { alert("The browser tried to load me and failed"); };
img.src = 'bogus';
// img hasn't even been added to the DOM.

答案 4 :(得分:0)

您可以使用服务器端语言(如PHP)来加载DOM的各个部分。虽然它不总是一个选项,但它比客户端脚本更可靠。缺点是调试可能更困难。

答案 5 :(得分:0)

我们假设你的页面中有一个这样的div元素。

<div id="containerDiv">
</div>

您可以使用$("#containerDiv").append()方法在页面加载时添加元素。但是,我没有看到你不在服务器端这样做的原因。

答案 6 :(得分:0)

您可以按如下方式使用AJAX加载,但必须将其拆分为三个不同的HTML文件和一个JS文件

JS

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
if(isAndroid) {
$("#container").empty();
$("#container").load( "startb.html");

}
else {
$("#container").empty();
$("#container").load( "flashObj.html");
}

startb.html

<div class="startb"><a href="Audio/004_IAM_God_is_Love.mp3"><img src="dbs/images/start.png" width="40" height="40" /></a></div>

flashObj.html

<div class="flashObj"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="200" height="20">
            <param name="movie" value="dbs/js/singlemp3player.swf?file=Audio/004_IAM_God_is_Love.mp3&autoStart=false&backColor=000000&frontColor=ffffff&songVolume=90" />
            <param name="wmode" value="transparent" />
            <embed wmode="transparent" width="200" height="20" src="dbs/js/singlemp3player.swf?file=Audio/004_IAM_God_is_Love.mp3&autoStart=false&backColor=000000&frontColor=ffffff&songVolume=90"
            type="application/x-shockwave-flash" />
            </object></div>

您的主页:

<div id="container"></div>

如果您需要任何进一步的帮助,请告诉我?

答案 7 :(得分:0)

您可以使用延迟加载:例如,您放入html ..并且当宽度更改为768px以下时,您的javascript中就有条件用src替换data-src。 some libraries for lazy loading