JQuery:结合click / trigger元素来编写更高效的代码
JQuery: combine click / trigger elements for more efficiently written code?
我正试图找出一种更有效的方法来编写我的代码,但它似乎效率低下。从本质上讲,我在导航中有一系列Id元素,这些元素可以触发页面上其他地方的各种Id的单击功能。我试着组合我的元素,但这似乎不工作:
$("#red, #green, #blue").bind("click", (function () {
$("#section-red, #section-green, #section-blue").trigger("click");
alert("#section-red (Red heading) has been triggered!");
alert("#section-green (Green heading) has been triggered!");
alert("#section-blue (Blue heading) has been triggered!");
}));
…但这似乎能触发一切。
我可以在下面这样做,但对于很多id,它将是一个怪物维护和更新。不确定是否有更好的方法。
$("#red").bind("click", (function () {
$("#section-red").trigger("click");
alert("#section-red (Red heading) has been triggered!");
}));
$("#green").bind("click", (function () {
$("#section-green").trigger("click");
alert("#section-green (Green heading) has been triggered!");
}));
// etc...
我这里有一把小提琴我一直在玩,但仍然没有乐趣。基本上,点击顶部导航会触发H2标题的模拟点击,但这只是代码效率的问题。
我会给你的nav元素添加数据属性,如:
<ul>
<li id="red" data-trigger-id="#section-red">Section Red</li>
<li id="green" data-trigger-id="#section-green">Section Green</li>
<li id="blue" data-trigger-id="#section-blue">Section Blue</li>
</ul>
$("#red, #green, #blue").bind("click", (function () {
var triggerID = $(this).data("trigger-id");
$(triggerID).trigger("click");
}
使用事件委托,您只需要注册两个事件处理程序。
$("ul").delegate("li", "click", function() {
var id = $(this).attr("id");
$("#section-"+id).trigger("click");
});
$(document).delegate("h2", "click", function() {
console.log($(this).attr("id"));
});
编辑
可以通过缓存元素查找来提高效率
var h2 = [];
h2['red'] = $("#section-red");
h2['blue'] = $("#section-blue");
h2['green'] = $("#section-green");
ul
委托内部click
处理程序
h2[id].trigger('click');
小提琴
首先,我要为ul
- 创建一个类在本例中,我将其命名为"sections":
<ul class="sections">
<li id="red">Section Red</li>
<li id="green">Section Green</li>
<li id="blue">Section Blue</li>
</ul>
接下来,将单击even绑定到$('.sections>li')
,获取索引,并将其应用于相对div。
$(".sections>li").click(function () {
var index=$(this).index();
$('.faqfield-question.accordion').eq(index).click();
});
这就是它的全部!
演示:http://jsfiddle.net/6aT64/43/
希望这对你有帮助,如果你有任何问题请告诉我!
这样做怎么样?这适用于所有浏览器(包括IE;-))
document.onclick = function(event){
event = event || window.event; //IE does not pass Object of event.
var target = event.target || event.srcElement;
switch(target.id){
case "header-red":
case "red-section":
redClicked();
break;
case "header-green":
case "green-section":
greenClicked();
break;
}
};
相关文章:
- 从桌面读取python文件时高亮显示代码
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- Angularjs代码未在匿名函数中运行
- 更高效的回文代码
- 如何使JavaScript代码更高效
- 简单的javascript-如何使代码更高效
- 我如何在jQuery中组合这三个代码块,并将它们写得更优雅/更高效?
- 我如何将这个javascript逻辑代码编写成更高效/紧凑的方式
- 是否有一种类似代数的工具可以将你的代码简化为高效的代码
- JQuery:结合click / trigger元素来编写更高效的代码
- 如何高效地逐步完成jQuery代码