利用JS和CSS的覆盖特性来解决文件冲突问题

随着项目规模的增大,协作开发也越来越长见,协作开发时间久了就会遇到一个恶心的文件冲突问题。

假设一个HTML文件引用了两个外部JS文件,而这两个外部JS文件你没有修改的权限,你只有HTML文件的修改权限,

两个外部JS文件都定义了window.onload事件。代码假设如下:

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>

a.js的文件内容:

window.onload=function(){
alert("这是a.js的");
}

b.js的文件内容:

window.onload=function(){
alert("这是b.js的");
}

这样的话,在a.js定义的window.onload事件会被b.js定义的window.onload事件覆盖掉。

如果我们想a.js和b.js中的window.onload都能正常执行,该怎么办呢???

我们知道JS有这样的特性:后面定义的同名变量会覆盖掉前面定义的同名变量的值而不报错,还有可以自定义变量 其值为系统函数的引用。

得到的变量跟系统函数的功能一样。

好了,我们就利用JS的这个特性,有的人认为这是JS设计的Bug,至少在这个时候这个特性还是有点用处的。

我们新改的代码如下:

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" >
var aa=window.onload;//得到已经定义的window.onload事件处理程序的句柄或者说引用 这里面保存了a.js定义的window.onload事件的逻辑操作。
window.onload=null;//把window.onload的事件处理程序注销,这样系统就不会再执行window.onload函数了。
</script>
<script type="text/javascript" src="b.js"></script>
<script type="text/javascript" >
var bb=window.onload;//得到已经定义的window.onload事件处理程序的句柄或者说引用 这里面保存了b.js定义的window.onload事件的逻辑操作。
window.onload=null;//把window.onload的事件处理程序注销,这样系统就不会再执行window.onload函数了。
</script>
window.onload=function(){
aa();bb();//重新注册window.onload事件,执行的代码逻辑为a.js和b.js中定义的代码操作。
}


这样就顺利解决了代码文件的冲突问题。是不是觉得很新奇呢?

CSS文件样式冲突也可以使用这种方法解决。

假设你的HTML加载了a.css b.css。 b.css中的某一个样式规则覆盖了a.css中的样式。而你只有修改a.css的权限,没有修改b.css的权限

而且css文件加载顺序必须是先a.css然后才b.css .这时候该怎么办呢??

不要慌!这时候你可以按照上面JS文件冲突的思路解决这个问题。

因为CSS也有这样的特性:后面定义的规则覆盖前面定义的同名规则。

这时候你只需要在b.css后面新建一个style 里面写上你想要覆盖的CSS规则 里面写新的样式规则即可。

很激动有木有?

今天就先到这里吧。

时间: 2024-11-07 13:59:00

利用JS和CSS的覆盖特性来解决文件冲突问题的相关文章

CSS 基本概念(Basic CSS Concepts)三、解决样式冲突

三.解决样式冲突(Resolving Style Conflicts) 在创建一个样式表的过程中,很可能有许多不同的规则将适用于同一个元素.例如,如果一个规则适用于所有的段落元素,另一个规则适用于具有一个具有紧急值的类属性的所有元素,那么应该使用哪一个规则? 当它发生时,这两个规则将适用.如果不同的规则包含处理不同属性的声明,那么就没有冲突,样式都是“组合在一起”的.但是,如果有不同的规则试图为同一个属性设置值的声明,那么有机制决定哪些样式将被使用. 举例说明,假设有以下三个规则: div#as

利用Js或Css滤镜实现IE6中PNG图片半透明效果 IE6PNG妥妥的

接下来介绍几种PNG图片在IE6中不透明的解决办法 1.用自己的PNG,让IE6一边去吧 首先制作PNG图片的时候,另存为一个GIF图片,因为IE6是支持GIF图片透明,然后在css定义 .pngtest{ background:url(mark.png); _background:url(mark.gif);} 优点:方便.快捷,使用超简单 缺点:对于PNG图片只是某些局域透明,该方法比较奏效,但图片要是半透明的话,这种方法就实现不了 该方法延伸的另外一种解决办法:用PS或者其他图片编辑工具把

CSS基础概念 第三节 解决样式冲突

在创建一个样式表的过程中,很可能有许多不同的规则将适用于同一个元素.例如,如果一个规则适用于所有的段落元素,另一个规则适用于具有一个具有紧急值的类属性的所有元素,那么应该使用哪一个规则? 当它发生时,这两个规则将适用.如果不同的规则包含处理不同属性的声明,那么就没有冲突,样式都是"组合在一起"的.但是,如果有不同的规则试图为同一个属性设置值的声明,那么有机制决定哪些样式将被使用. 举例说明,假设有以下三个规则: div#aside h1 {color: red; margin: 0.5

【转】在ASP.NET MVC中,使用Bundle来打包压缩js和css

在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简单记录下如何使用. 首先,如果是使用的ASP.NET MVC4基本或者其他内容更丰富的模板,B

在ASP.NET MVC中,使用Bundle来打包压缩js和css(转)

转自:http://www.cnblogs.com/xwgli/p/3296809.html 在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简

ASP.NET MVC使用Bundle来打包压缩js和css

Bundle它是用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 1.BundleConfig配置Bundle public class BundleConfig { // 有关绑定的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=301862 public static void RegisterBundles(BundleCollection bundl

[转载]在ASP.NET MVC中,使用Bundle来打包压缩js和css

在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简单记录下如何使用. 首先,如果是使用的ASP.NET MVC4基本或者其他内容更丰富的模板,B

【php】基于Redis的js、css缓存类

<?php /* *基于Redis的js.css缓存类(有效解决tp等框架访问public出现的各种问题) *Written by Radish 2015.8.16 */ define('REDIS_HOST', '127.0.0.1'); define('REDIS_PORT', 6379); // class im { function __construct() { $this->redis = new Redis(); $this->redis->connect(REDIS

在ASP.NET MVC中,使用Bundle来打包压缩js和css

在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简单记录下如何使用. 首先,如果是使用的ASP.NET MVC4基本或者其他内容更丰富的模板,B