超轻扩展折叠javascript解决方案?
单击“切换”文本时,如何打开/关闭content div超轻扩展折叠javascript解决方案?,javascript,toggle,Javascript,Toggle,单击“切换”文本时,如何打开/关闭content div <div class="toggle col">TOGGLE <div class="content-to-toggle"> content </div> </div> ?该函数有一些缺陷: addEventListener将在IE 8及更低版本的浏览器中失败 e.target将在IE 8及更低版本的浏览器中失败 indexOf('toggle')将匹配类值中的任何位置,
<div class="toggle col">TOGGLE
<div class="content-to-toggle">
content
</div>
</div>
?该函数有一些缺陷:
e.target
将在IE 8及更低版本的浏览器中失败indexOf('toggle')
将匹配类值中的任何位置,可能最好使用如下常规表达式:/(^ |\s)toggle(\s |$)/replace(/\bexp\b |\bcol\b/
使用分词作为分隔符,但类值由空格分隔,而不是分词(如连字符)<title>Toggling Example</title>
<style type="text/css">
.exp {background-color: #666666;}
.col {background-color: #bbbbbb;}
</style>
<script type="text/javascript">
// Generic container for utility functions
var util ={};
util.trim = function(s) {
return s.replace(/(^\s+)|(\s+$)/g,'').replace(/\s+/g,' ');
}
// Generic container for DOM functions
util.dom = {};
util.dom.hasClass = function(el, cName) {
var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)');
return el && re.test(el.className);
};
util.dom.addClass = function(el, cName) {
if (!util.dom.hasClass(el, cName)) {
el.className = util.trim(el.className + ' ' + cName);
}
};
util.dom.removeClass = function(el, cName) {
if (util.dom.hasClass(el, cName)) {
var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)','g');
el.className = util.trim(el.className.replace(re, ''));
}
}
// Generic container for DOM event functions
util.event = {};
util.event.addListener = function(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
function toggleClass(el, c0, c1) {
// Replace c0 with c1
if (util.dom.hasClass(el, c0)) {
util.dom.removeClass(el, c0);
util.dom.addClass(el, c1);
// Replace c1 with c0
} else if (util.dom.hasClass(el, c1)) {
util.dom.removeClass(el, c1);
util.dom.addClass(el, c0);
// If doesn't have either class, add c0
} else {
util.dom.addClass(el, c0);
}
}
// Is this "light" enough?
window.onload = function() {
util.event.addListener(document.body, 'click', function(e) {
var e = e || window.event;
var el = e.target || e.srcElement;
toggleClass(el, 'exp', 'col');
});
}
</script>
<div>foo bar</div>
它的效率更高,并且对类名值使用标准分隔符。该函数有一些缺陷:
e.target
将在IE 8及更低版本的浏览器中失败indexOf('toggle')
将匹配类值中的任何位置,可能最好使用如下常规表达式:/(^ |\s)toggle(\s |$)/replace(/\bexp\b |\bcol\b/
使用分词作为分隔符,但类值由空格分隔,而不是分词(如连字符)<title>Toggling Example</title>
<style type="text/css">
.exp {background-color: #666666;}
.col {background-color: #bbbbbb;}
</style>
<script type="text/javascript">
// Generic container for utility functions
var util ={};
util.trim = function(s) {
return s.replace(/(^\s+)|(\s+$)/g,'').replace(/\s+/g,' ');
}
// Generic container for DOM functions
util.dom = {};
util.dom.hasClass = function(el, cName) {
var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)');
return el && re.test(el.className);
};
util.dom.addClass = function(el, cName) {
if (!util.dom.hasClass(el, cName)) {
el.className = util.trim(el.className + ' ' + cName);
}
};
util.dom.removeClass = function(el, cName) {
if (util.dom.hasClass(el, cName)) {
var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)','g');
el.className = util.trim(el.className.replace(re, ''));
}
}
// Generic container for DOM event functions
util.event = {};
util.event.addListener = function(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
function toggleClass(el, c0, c1) {
// Replace c0 with c1
if (util.dom.hasClass(el, c0)) {
util.dom.removeClass(el, c0);
util.dom.addClass(el, c1);
// Replace c1 with c0
} else if (util.dom.hasClass(el, c1)) {
util.dom.removeClass(el, c1);
util.dom.addClass(el, c0);
// If doesn't have either class, add c0
} else {
util.dom.addClass(el, c0);
}
}
// Is this "light" enough?
window.onload = function() {
util.event.addListener(document.body, 'click', function(e) {
var e = e || window.event;
var el = e.target || e.srcElement;
toggleClass(el, 'exp', 'col');
});
}
</script>
<div>foo bar</div>
它的效率更高一些,并且对类名值使用标准分隔符。我更喜欢
document.addEventListener('click', function(e) {
var cl = e.target.classList;
if (cl.contains('toggle')) {
cl.toggle("exp");
cl.toggle("col");
}
});
但是很多浏览器都不支持它:-(我更喜欢
document.addEventListener('click', function(e) {
var cl = e.target.classList;
if (cl.contains('toggle')) {
cl.toggle("exp");
cl.toggle("col");
}
});
但是它不会被许多浏览器支持:-(
)不知道你的函数在没有看到CSS的情况下做什么。如果较轻的意思是你写的代码更少,考虑包括jQuery,并使用它来检查演示,认为它符合你的要求。CSS类似于“代码> COLL”。内容切换{显示:无;}。< /代码>和<代码> .Exp>内容切换到:显示;块;} /COD>不知道你的函数在没有看到CSS的情况下做什么。如果打火机意味着你编写更少的代码,考虑包括jQuery并使用它来检查演示,认为它符合你的要求。CSS类似于“代码> COLL”。内容切换{显示:无;}。和.exp>切换{display:block;}的内容ligher=less code。不关心ie8和类名匹配,4也没有问题……除了IE之外,还有其他浏览器使用MS事件模型。将\b
更改为\s
不需要花费任何成本,意味着逻辑符合相关标准。谢谢,但是js是巨大的:我从中挖掘了一些东西ugh:Pligher=代码更少。不关心ie8和类名匹配,4也没有问题……除了IE之外,还有其他浏览器使用MS事件模型。将\b
更改为\s
不需要花费任何成本,意味着逻辑符合相关标准。谢谢,但js是巨大的:我从中挖掘了一些东西gh:P