如何改进jQuery代码
How to improve jQuery code
语法如下:我想知道这部分:$($(this).parent().siblings('div')[0])
是否可以通过直接访问jQuery对象而不需要再次使用$();
来编写得更优雅。
我使用.parent().siblings
而不使用div
的类,因为我想在类不同的地方重用代码。
$('textarea').click(function(){
$($(this).parent().siblings('div')[0]).html('<span>140</span>');
$($(this).parent().siblings('div')[1]).html('<span>Reply</span>');
});
<div class="post_area2">
<div class="wrap_area2 left">
<textarea></textarea>
</div>
<div class="word_c left"></div>
<div class="submit left"></div>
</div>
您可以使用.eq()
方法。
$('textarea').click(function(){
$(this).parent().siblings('div')
.eq(0).html('<span>140</span>').end()
.eq(1).html('<span>Reply</span>');
});
Try
$('textarea').click(function(){
$(this).parent().next().html('<span>140</span>')
.next().html('<span>Reply</span>');
});
http://jsfiddle.net/rVfJ4/我同意sweetamylase的回答。代码应该可以工作。因为它是使用原生javascript,我认为这是很好的性能。
或使用类名来确定div:
$('textarea').click(function(){
var parentDiv = $(this).parents('div.post_area2'); // avoid to use $(this) multi time in this function
parentDiv.find('div.word_c').html('<span>140</span>');
parentDiv.find('div.submit').html('<span>Reply</span>');
});
即使你添加了新的div,它也能正常工作。
如果你有其他的解决方案,不要使用'eq()'。
对不起,我没有足够的声望来投票。
我会这样重写:
$('textarea').click(function(){
var divContainer = $(this).parent().siblings('div');
divContainer[0].innerHTML = '<span>140</span>';
divContainer[1].innerHTML = '<span>Reply</span>';
});
您可以使用本地属性innerHTML
来设置DOM元素的内容,这相当于使用.html()
减去调用jQuery对象的要求。
另外,这取决于您的编码风格是否喜欢使用链接,因为使用jQuery很容易做到这一点,但当行变长时,可能很难阅读。
您应该给其他div
额外的类来表示它们的含义。
$('textarea').click(function(){
$(this).parents('form').children('.hide-until-using-form').show();
});
这创建了一个高度可重用的函数,它不依赖于涉及多少兄弟姐妹,按钮的文本是什么(Post?编辑?)等。
有无数种方法,
你可以想想有点跳出框框,我不确定最新版本的jquery优化访问元素,如果我错了,请随时让我抱歉。
但是这里有一些方法可以做到这一点:
var parentSelector = $(this).parent().parent();
var parentSelector = $(this).parents('#uniqueId');
var currentId = this.id;
var childrenSelector = parentSelector.children('div[id!="' + currentId + '"'];
var one = $(childrenSelector.get(0));
var two = $(childrenSelector.get(1));
一个简单的方法来优化访问元素是包装/创建新的函数保存引用到DOM元素,有一些问题需要考虑,但你可以做一个很好的DOM缓存库。
也许像这样
$('textarea').click(function () {
var parentSiblings = $(this).parent().siblings('div');
$(parentSiblings[0]).html('<span>140</span>');
$(parentSiblings[1]).html('<span>Reply</span>');
});
或
$('textarea').click(function () {
var parentSiblings = $($(this).parent().siblings('div'));
parentSiblings.eq(0).html('<span>140</span>');
parentSiblings.eq(1).html('<span>Reply</span>');
});
其他人可能认为使用普通javascript更优雅。
function empty(element) {
"use strict";
while (element.hasChildNodes()) {
element.removeChild(element.lastChild);
}
}
function addEvent(nodeList, type, callBack) {
"use strict";
var length = nodeList.length,
i = 0;
while (i < length) {
nodeList[i].addEventListener(type, callBack, false);
i += 1;
}
}
addEvent(document.getElementsByTagName("textarea"), "click", function (evt) {
"use strict";
var divContainer = evt.target.parentNode.parentNode.getElementsByTagName("div"),
span;
empty(divContainer[1]);
span = document.createElement("span");
span.textContent = "140";
divContainer[1].appendChild(span);
empty(divContainer[2]);
span = document.createElement("span");
span.textContent = "Reply";
divContainer[2].appendChild(span);
});
在jsfiddle
上可以找到这些和其他的我想这取决于你如何定义更优雅。有时可读性更重要,也许不包括第三方库和使用普通javascript。
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 将 jQuery 代码添加到 Index.aspx 页面
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- Jquery:代码在rails中的页面加载时未执行
- 您有更好的动态方式来缩短复杂的代码jquery吗
- Don't工作警报代码jQuery
- <script src=“//代码.jquery.com/jquery-1.11.1.min.js”></
- 如何确保我的值已添加并存在,然后运行另一个代码jquery
- 命令代码jquery文件错误
- 解释此代码 jQuery
- 使用 JavaScript 编写 HTML 代码 (jquery)
- 将 Ruby 数组传递给 Ruby on Rails 中 Haml 视图中的 JavaScript 代码 (jquery
- 通过国家代码jquery获取时区
- 什么是错误的这个自动完成代码(JQuery-UI自动完成)
- 抓取国家从谷歌地理代码jquery
- 检查列表中的元素是否有来自变量的SRC,然后运行代码- jQuery / Javascript
- 在附加代码jquery中包含附加内容
- 将变量php问题化为代码jquery