模拟选项卡点击样式切换
$(this).addClass("active").siblings().removeClass("active");
jQuery获取Select选中项的Text和Value
为Select添加事件,当选择其中一项时触发 | $("#select_id").change(function(){//code...}); |
获取Select选中项的Text | $("#select_id option:selected").text(); $("#select_id").find("option:selected").text(); |
获取Select选中项的Value | $("#select_id").val(); |
获取Select对应Value的Text | $("#select_id option[value="+val+"]").text() |
获取Select选择的索引值 | $("#select_id ").get(0).selectedIndex; |
获取Select最大的索引值 | $("#select_id option:last").attr("index"); |
jQuery设置Select选中项的 Text和Value
设置Select索引值为1的项选中 | $("#select_id ").get(0).selectedIndex=1; |
设置Select的Value值为4的项选中 | $("#userStatus").prop("value","4"); $("#prodBrandSelect").val("4").trigger("change"); |
设置Select的Text值为jQuery的项选中 | $("#select_id option[text='jQuery']").attr("selected", true); |
根据后台传入的值,设置下拉框选中状态 | $("#userStatus").prop("value",data.userStatus); |
注意:之前$(".selector").find("option[text='pxx']").attr("selected",true);这种写法是错误的,input支持这种获取属性值的写法:"input[text='pxx']",select中需要"option:contains('pxx')"这样获取。 |
jQuery添加/删除Select的Option项
手动触发下拉框选中项的点击事件 | $('#select_id').trigger('click') 或者也可以指定选中值:$("#select_id").val("4").trigger("change"); |
为Select追加一个Option(下拉项) | $("#select_id").append("<option value='Value'>Text</option>"); |
为Select插入一个Option(第一个位置) | $("#select_id").prepend("<option value='0'>请选择</option>"); |
删除Select中索引值最大Option(最后一个) | $("#select_id option:last").remove(); |
删除Select中索引值为0的Option(第一个) | $("#select_id option[index='0']").remove(); |
删除Select中Value='3'的Option | $("#sel option[value='3']").remove(); |
删除Select中Text='4'的Option | $("#select_id option[text='4']").remove(); |
删除Select中除第一个以外的Option | $('#select_id').find("option:not(:first)").remove(); |
清空下拉框 | $("#sel").empty(); |
控制表单元素
清空文本框,文本区域 | $("#text").attr("value",''"); |
填充文本框,文本区域 | $("#txt").attr("value",'asdc'); |
多选框checkbox不打勾 | $("#chk1").prop("checked",false); |
多选框checkbox打勾 | $("#chk2").prop("checked",true); |
判断是否已经打勾 | if ($("#chk").is(":checked")); |
设置第一个radio单选框为预选中 | $('input[name=gender]:first').prop('checked',true); |
设置value=2的radio单选框为预选中 | $("input:radio").prop("checked",'2'); |
设置radio单选框的第二个下标为预选中 | $('input[name=items]').get(1).checked = true; |
根据后台传入的值,设置单选按钮的选中状态 | $("input[name=gender][value='"+data.gender+"']").prop("checked", "checked"); |
获取表单元素
文本框 | $("#txt").attr("value"); |
获取节点下的input | $("#divId").find("input"); |
多选框 checkbox | $('input:checkbox[name=yyYx]:checked').val(); 只返回最后一次选中的多选框的value,如果没有选中的则返回undefined |
过滤掉含有disabled属性的checkbox | $('body').find('input[type="checkbox"]:not(:disabled)'); |
单选组radio | $('input:radio[name=items][checked]').val(); 如果没有选中的则返回undefined |
下拉框select | $('#sel').val(); |
textarea文本域 | jQuery的.val()方法是专门用来获取表单元素值的,而textarea也属于表单元素所以可以直接用.val()方法获取。 不过要注意,由于textarea是个双标记因此.text()或.html()方法也可以获取到其中的信息,但建议不要这样获取,因为.val()是专用于获取值的方法,比.text()或.html()更可靠。 |
select的级联操作,即第二个select的值随着第一个select选中的值变化
$(".selector1").change(function(){
// 先清空第二个
$(".selector2").empty();
// 实际的应用中,这里的option一般都是用循环生成多个了
var option = $("<option>").val(1).text("pxx");
$(".selector2").append(option);
});
通过下拉框控制表格Table行隐藏和显示
<select id="states" name="process" onchange="setSearchForm(this.value);">
<option value="0" selected="">全部状态</option>
<option value="2">待处理</option>
<option value="1">已处理</option>
</select>
function setSearchForm(value){
$('table tbody tr').show();
if(value=="0"){
$('table tbody tr').show();
}else if(value=="2"){
$('table tbody tr').hide();
$('#fankui tbody tr td:nth-child(4):contains("待处理")').parent('tr').show();
}else if(value=="1"){
$('table tbody tr').hide();
$('#fankui tbody tr td:nth-child(4):contains("已处理")').parent('tr').show();
}
}
Table表格操作
隐藏 / 删除一行 | $("#table tbody tr:eq(3)").hide() / remove(); |
删除所有行 | $("#tableList tbody").find("tr").remove(); |
隐藏一列 | $("#table tr").each(function(){$("td:eq(3)",this).hide()}) |
隐藏单元格 | $("#table tr td:nth-child(3)").hide() |
得到某个单元格的值 | $("#table7 tr:eq(1) td:nth-child(1)").html(); |
设置某个单元格的值 | $("#table7 tr:eq(1) td:nth-child(1)").html("value"); |
插入一行 | $("<tr>···</tr>").insertAfter($("#table tr:eq(1)")); |
获取当前行的指定列
$("table tr").click(function() {
var s = $(this).find("td:nth-child(3)").text(); //当前行第3列的值,从1开始
});
将后台返回的数据渲染进Table表格并将每行数据存储进data中
/**
* 回显数据
*/
function fnShowTableData(data){
$.each(data,function(i,obj){
var html = '';
html += '<tr id="my_tr_'+obj.unitId+'">';
// 序号
html += '<td>'+(i+1)+'</td>';
// 名称
html += '<td>'+nullToUnderline(obj.unitName)+'</td>';
// 金额
html += '<td>'+toDecimal(obj.unitMoney)+'</td>';
// 操作列HTMl
var optHtml = fnGetOptHtml(obj);
html += '<td>'+optHtml+'</td>';
html += '</tr>';
$("#t_body").append(html);
/*存储本行数据*/
$("#my_tr_"+obj.unitId).data("data", obj);
});
/*结算按钮*/
$(".click_editor").click(fnEditorBtn);
}
/**
* 操作列HTMl
* @param state
* @returns {String}
*/
function fnGetOptHtml(obj){
var html="";
html+='<a id="'+obj.unitId+'" class="opera_btn click_editor">结算</a>';
return html;
}
/**
* 结算按钮
*/
var fnEditorBtn = function(){
var id = $(this).attr("id");
var obj = $(id).data("data");
layer_full("结算", basePath+"/expensesPayBindRecord/update_expenses_pay_bind_record_page?balanceMonth="+balanceMonth+"&toBeSettle="+obj.toBeSettle+"&unitId="+obj.unitId);
}
点击实现复选框的全选和全不选
var checked = $("#check_all").prop("checked");
if (checked) {
//如果是选中状态
$("input[name='items']").prop("checked",false);
} else {
$("input[name='items']").prop("checked",true);
}
})
当单击表格行时,切换复选框为选中状态
var checked = $("#ck_" + obj.dealerId).prop("checked");
if (checked) {
$("#ck_" + obj.dealerId).prop("checked",false);
} else {
$("#ck_" + obj.dealerId).prop("checked",true);
}
<!-- 如果手动全选,则全选按钮也自动选中 -->
var len = $("input[type='checkbox'][id^='ck_']:checked").length;
if (len == ALL_DATA.length) {
$("#check_all").prop("checked",true);
} else {
$("#check_all").prop("checked",false);
}
用多选框批量删除表数据
1. 前端页面
$("#btnDel").on('click',function(){
var count = 0; //计数复选框个数
var checkedList = new Array(); //存储勾选的复选框
$("input[name='items']").each(function(){
if($(this).is(":checked")){
id = $(this).parent().next().text();
count++;
checkedList.push(id); //将获取到的复选框对应的行记录id添加到数组
}
});
if(count==0){
alert("请选择要删除的记录")
}else{
$.ajax({
type:'post',
url:'deletePerson.do',
data:{
"delitems":checkedList.toString()
},
success:function(){
window.location.reload();
},
error:function () {
alert("删除失败!");
}
});
}
})
2. 后端代码
@PostMapping("deletePerson.do")
public void deletePerson(HttpServletRequest request) {
String items = request.getParameter("delitems");
String[] strs = items.split(",");将获得的行id存到一个数组
for(int i=0;i<strs.length;i++) {
int id = Integer.parseInt(strs[i]);
personService.deletePersonById(id);
}
}
遍历table下的checkbox判断是否被选中
$('#btn').on('click', function(){
var count = 0;
$("input[name='items']").each(function(){
if($(this).is(":checked")){
count++;
}
});
alert(count); //输出被选中的复选框的个数
})
实现字数输入统计,以提醒字数输入限制
<textarea class="wnbs_compen_cancel_textarea" id="remark" placeholder="请输入反馈内容,100字以内" maxlength="100" rows="5"></textarea>
<span class="font_length"><span id="font_length">0</span>/100</span>
/*多加了个propertychange事件为了兼容IE9以下的浏览器*/
$(".wnbs_compen_cancel_textarea").on("keyup input propertychange",function(){
var font_length = $(this).val().length;
$("#font_length").html(font_length);
})
监听输入框输入完毕触发
<!-- 当input失去焦点并且它的value值发生变化时触发 -->
<input type="text" onchange="playAddress()" value="" placeholder="此处粘贴地址" />
限制 input 输入框只能输入纯数字
联系方式:<input type="text" name="" οninput="value=value.replace(/[^\d]/g,'')">
使用 oninput 事件,可以在输入的时候实时监控输入内容,如果输入字母,会自动删除字母。
但是在实际开发中可能会遇到oninput事件不被支持的情况,导致该事件无法触发。
下面提供备选方案:
<input type="text" name="" onkeyup="value=value.replace(/[^\d]/g,'')" onblur="value=value.replace(/[^\d]/g,'')">
使用 onkeyup 事件,有 bug ,那就是在中文输入法状态下,输入汉字之后直接回车,会直接输入字母。所以再添加个onblur事件作为补充,在输入框失去焦点时再检查一下。
DIV 上移下移功能
/** 上移 */
$(document).on('click','.upBtn',function(){
// 获取需要上移的节点
var html = $(this).parents(".creat_pipeline_steps_new");
// 复制该节点用来后面的挪动
var obj = html.clone();
// 如果没有已经置顶就把复制的节点放到上一个节点的前面
if(html.prev(".creat_pipeline_steps_new").length>0){
html.prev().before(obj);
html.remove();
}
});
/** 下移 */
$(document).on('click','.downBtn',function(){
var html = $(this).parents(".creat_pipeline_steps_new");
var obj = html.clone();
if(html.next(".creat_pipeline_steps_new").length>0){
html.next().after(obj);
html.remove();
}
});
模拟淘宝星级评价功能
<div class="wnbs_evaluate_dafen_con">
<span class="wnbs_evaluate_product_tit">服务质量</span>
<div id="serviceQuality" class="wnbs_evaluate_product_icon_body">
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
</div>
<span id="serviceQualityText" class="wnbs_evaluate_product_text"></span>
</div>
<div class="wnbs_evaluate_dafen_con">
<span class="wnbs_evaluate_product_tit">服务质量</span>
<div id="serviceAttitude" class="wnbs_evaluate_product_icon_body">
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
</div>
<span id="serviceAttitudeText" class="wnbs_evaluate_product_text"></span>
</div>
<div class="wnbs_evaluate_dafen_con">
<span class="wnbs_evaluate_product_tit">服务质量</span>
<div id="serviceSpeed" class="wnbs_evaluate_product_icon_body">
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
<i class="wnbs_evaluate_product_icon"></i>
</div>
<span id="serviceSpeedText" class="wnbs_evaluate_product_text"></span>
</div>
function rating(thiss){
var starsCount = $(thiss).prevAll().length; //选中的星星数量
var parentId = $(thiss).parent().attr("id"); //评价项
var evaluate = $(thiss).parent().next(); //评价等级对应文本内容
$(thiss).siblings().removeClass("active");
$("#"+parentId+" i").each(function(index,element){
if(index <= starsCount){
$(element).addClass("active");
/*将选中的星星数量存到starsCount属性中*/
$("#"+parentId).attr("starsCount",starsCount+1);
}
$(evaluate).text(EVA_ARR[starsCount]);
});
}
if(!$("#serviceQuality i").hasClass("active")){
mui.toast("请对服务质量做出评价");
return false;
}
if(!$("#serviceAttitude i").hasClass("active")){
mui.toast("请对服务态度做出评价");
return false;
}
if(!$("#serviceSpeed i").hasClass("active")){
mui.toast("请对服务速度做出评价");
return false;
}
obj.serviceQuality = $("#serviceQuality").attr("starsCount");
obj.serviceAttitude = $("#serviceAttitude").attr("starsCount");
obj.serviceSpeed = $("#serviceSpeed").attr("starsCount");
将重复性的DOM节点制作成模板
说明:有时候页面会用到这样一种列表展示,DOM节点都一样,只有数据不一样而已,一遍一遍的添加节点会显得代码冗余,将这一步提取出来,封装成一个模板。每次添加节点时直接添加现成的模板,然后利用replace方法将 @data@ 替换成真实数据就行了。
方式一(通常用于回显):
<div id="template" hidden="hidden">
<div class="wnbs_orderWgt_list">
<div>@type@</div>
<div>@createTime@</div>
<div>@remark@</div>
</div>
</div>
function fnShowList(list){
if(list !=null && list.length >0){
$.each(list,function(i,obj){
var example = $("#template").html();
example = example.replace("@type@",obj.type);
example = example.replace("@createTime@",obj.createTime);
example = example.replace("@remark@",obj.remark);
$("#view").append(example);
});
}else{
var html = '<div ><img src="../../images/order/no_order.png" class="wnbs_noOrder_img" />暂无信息</div>';
$("#view").append(html);
}
}
方式二(通常用于添加):
利用 @myIndex@ 添加序号,来区分DOM
<div id="template_div" style="display: none;">
<span class="font-size-14 float-left">
台账<span class="myIndex">@myIndex@</span>
</span>
<table id="@ledger_template@" index="@myIndex@">
<tr>
<td class="text"><span>*</span>联系方式:</td>
<td>
<input type="text" id="link_time@myIndex@" placeholder="请输入联系方式" />
</td>
<td id="money_text">收入金额:</td>
<td >
<input type="text" id="money@myIndex@" placeholder="请输入收入金额"/>
</td>
<td class="text">备注:</td>
<td>
<input type="text" id="remark@myIndex@"placeholder="请输入备注200字以内" />
</td>
</tr>
</table>
</div>
var INDEX = 1;
function fnAddDom(){
var htmlInfo=$("#template_div").html();
var index = INDEX++;
htmlInfo = htmlInfo.replace(/@myIndex@/g, index);
$("#content_div").append(htmlInfo);
}
输入框获取焦点并且光标定位到文字末尾
var val = $(this).next().val(); //存储input文本框的内容
$(that).val("").focus().val(val); //先清空input内容,然后获取焦点,最后赋值
按ESC键关闭弹出层
$(document).keydown(function (event) {
if (event.keyCode == 27) {
/*添加(关闭弹出层)*/
$(".common_dialoge_wrapper").hide();
}
});
点击空白区域隐藏弹出框
$(document).click(function(e){
// 目标区域,点击某个弹出的区域
var pop = $('#popup');
if(!pop.is(e.target) && pop.has(e.target).length === 0) {
/*关闭所有浮层*/
$("#popup").find(".common_select").each(function(index,object){
$(object).hide();
});
}
});
校验数组是否有重复的数据(ES5)
var flag = true;
var s = array.join(",")+",";
for(var i=0;i<array.length;i++) {
if(s.replace(array[i]+",","").indexOf(array[i]+",")>-1) {
mui.toast("不允许重复:" + array[i]);
flag = false;
break;
}
}
return flag;
校验数组是否有重复的数据(ES6)
let arr = [1,2,3,4,5];
if(new Set(arr).size !== arr.length){
alert(存在相同的元素);
}