我想在点击按钮时添加一个选择字段。选项的值是$ all_cs,由Yii Framework创建(约7k项目)。
<div class="cos-input">
<div id="cos_container"></div>
<span class='add-input cs_name' href="#" name="cs_name" onclick='addFields_cos()' style="border: solid 1px; padding: 3px;">Add COURSES</span>
</div>
选项元素内容:
$all_cs = $form->dropDownList($model, 'cos[n]', $allCourses, array('prompt'=>''));
$pos = strpos($all_cs, "<option");
$rpos = strrpos($all_cs, "</option>");
$all_cs = substr($all_cs, 0, $rpos+9);
$all_cs = substr($all_cs, $pos, strlen($all_cs) - $pos);
$all_cs = str_replace("\n", "", $all_cs);
我有两种方式:
1 - 使用Js:
function addFields_cos(){
var cos_container_parent = document.getElementById('cos_container');
var div = document.createElement("div");
div.name = "div_rm";
cos_container_parent.appendChild(div);
var new_cos = document.createElement("select");
new_cos.name = 'new_courses[]';
div.appendChild(new_cos);
new_cos.innerHTML = '<?php echo $all_cs; ?>';
div.innerHTML += "<span class='delete_div' href='#'> delete </span>";
div.appendChild(document.createElement("br"));
div.appendChild(document.createElement("br"));
}
2 - 使用Jquery:
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").append("<div><select name='new_courses[]'>");
$("#cos_container").append("</select></div><br>");
$('#cos_container select').append('<?php echo $all_cs; ?>');
//$('#cos_container div').append("<span class='delete_div' href='#'> delete </span>");
});
});
使用Js时,添加多个字段时字段添加速度非常快,时间常数增加。
但是当使用JQuery时,字段加速较慢,并且添加尽可能多的文件。当有超过10个字段时,时间是任何秒完成。
我需要帮助才能得到答案:
1 - 添加多个字段时如何使用JQuery更慢而不是常量?
2 - 如何更快地改变我的JQuery功能?在这种情况下应该使用JQuery吗?
(抱歉,我的英语不好)
答案 0 :(得分:-1)
append()比单个html()/ text()更重要。
下面的代码有望加速jquery版本:
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").html(generateContent());
});
function generateContent() {
return '<div>' +
'<select name="new_courses[]">' +
'<?php echo $all_cs; ?>' +
'</select>' +
'<span class="delete_div" href="#">delete</span>' +
'</div><br>';
}
});
添加多个选择框:
JSbin prototype,它似乎比原始代码快得多?正如其他评论中所提到的那样,选择器查找是瓶颈。
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").append(generateContent());
});
function generateOptionsion() {
return '<div>' +
'<select name="new_courses[]">' +
'<?php echo $all_cs; ?>' +
'</select>' +
'<span class="delete_div" href="#">Delete</span>' +
'</div><br>';
}
});
答案 1 :(得分:-1)
每次执行$(selector)
时,都必须搜索DOM以查找匹配的元素。这是一个缓慢的过程,因此总是寻找最小化DOM交互次数的方法。
在这方面,jQuery方法链接可以非常有效。
例如:
$(document).ready(function(){
$(".cs_name").click(function() {
$("#cos_container")
.append("<div><select name='new_courses[]'></select></div><br/>");//ensure all HTML fragments are well formed and complete at the point they are inserted.
.find("select")
.append('<?php echo $all_cs; ?>');
});
});
这会更快但可能仍然没有您的POJS代码那么快。
答案 2 :(得分:-1)
这就是大多数新javascript / jquery开发人员可能存在的误解。
让我说清楚:
addFields_cos
类似的内容。 作为一个开发人员,它依赖于你决定使用什么时,如果它只是在客户端的一些简单的事件处理,那么我会说不需要jQuery。 但如果它比处理事件更复杂,比如遍历dom结构或使用一些主要依赖于jQuery并需要AJAX功能的第三方库,那么请使用 jQuery 。
快乐编码:)