四时宝库

程序员的知识宝库

原生js实现jQuery parentsUntil 和 closest方法

需求很简单,如下图:点击表格内每行的删除按钮时删除该行

直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo2</title>
    <style>
        *{margin:0;padding:0;}
        .box-content{width:1000px;padding:10px;margin:10px auto;background:rgba(199, 237, 204, 1);font-size:12px;}
        .box-main{padding:10px;background:#ffff;}
        .box-hd{line-height:22px;}
        .box-title{font-size:14px; font-weight:600;color:#323232;}
        .table-fixed{table-layout:fixed;border-spacing:0;border-collapse:collapse;}
        .table-fixed th{height:30px;background:#b4e0a3;box-sizing:border-box;}
        .table-fixed th,
        .table-fixed td{font-weight:normal;padding:0;margin:0;line-height:16px;padding:3px 0 3px 4px;border:1px solid #a0e08e;text-align:left;word-break:break-all;}
        .input{padding:0 4px;height:18px;border:1px solid #ddd;}
        .input-60{width:50px;}
        .tip{margin-top:5px;color:#f00;}
    </style>
</head>
<body>
    <div class="box-content">
        <div class="box-main">
            <h2 class="box-title">开票清单</h2>
            <table class="table table-fixed" id="table">
                <tr>
                    <th width="80">销售型号ID</th>
                    <th width="118">子项</th>
                    <th width="70">品牌</th>
                    <th width="70">销售单价</th>
                    <th width="60">销售数量</th>
                    <th width="70">已开票</th>
                    <th width="70">开票申请中</th>
                    <th width="70">可开票</th>
                    <th width="70">本次开票</th>
                    <th width="70">本次开票额</th>
                    <th width="120">订单号</th>
                    <th width="70">客户联系人</th>
                    <th width="40">操作</th>
                </tr>
                <tr class='tr-item'>
                    <td>188888</td>
                    <td>123456789123456789</td>
                    <td></td>
                    <td></td>
                    <td>10000</td>
                    <td>1000</td>
                    <td>1500</td>
                    <td>1500</td>
                    <td><input class="input input-60" type="text" value="2500"></td>
                    <td>1500</td>
                    <td>SOP18122588888</td>
                    <td><a href="#">成sir</a></td>
                    <td><a href="#" class="del">删除</a></td>
                </tr>
                <tr class='tr-item'>
                    <td>288888</td>
                    <td>123456789123456789</td>
                    <td></td>
                    <td></td>
                    <td>10000</td>
                    <td>1000</td>
                    <td>1500</td>
                    <td>1500</td>
                    <td><input class="input input-60" type="text" value="2500"></td>
                    <td>1500</td>
                    <td>SOP18122588888</td>
                    <td><a href="#">成sir</a></td>
                    <td><a href="#" class="del">删除</a></td>
                </tr>
                <tr>
                    <td>总计</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td>4500</td>
                    <td>1500</td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </table>
            <p class="tip">*本次开票数量不能为空!</p>
        </div>
    </div>
    <script>
        function queryElement(node,selectScope){
            d = !selectScope ? document : selectScope;
            if(/\./.test(node)){
                node = node.replace('.','');
                //HTMLcollection 伪数组
                node = d.getElementsByClassName(node);
            }else if(/\#/.test(node)){
                node = node.replace('#','');
                //HTML元素
                node = d.getElementById(node);
            }else{
                //HTMLcollection 伪数组
                node = d.getElementsByTagName(node);
            }
            return node;
        }

        function closest(node,parent){
            if(parent){
                parent = queryElement(parent);
                while(node.nodeType !== 9){
                    node = node.parentNode;
                    // class tagName时判断伪数组中是否存在该node元素
                    // id时判断是否相等
                    if([].indexOf.call(parent,node) >= 0 || node === parent){
                        return node;
                    }
                }
            }
            return null;
        }

        function parentsUntil(node,parent,isIncludeParent){
            if(parent){
                parent = queryElement(parent);
                var arr = [];
                while(node.nodeType !== 9){
                    var tempNode = isIncludeParent ? node : node.parentNode;
                    // class tagName时判断伪数组中是否存在该node元素
                    // id时判断是否相等
                    var nowIsParent = [].indexOf.call(parent,tempNode) >=0 || tempNode === parent;
                    if(nowIsParent){
                        break;
                    }
                    node = node.parentNode;
                    arr.push(node);
                }
                return arr;
            }
            return null;
        }
        // closest 调用
        var del = queryElement('.del');
        [].forEach.call(del,function(item){
            item.onclick = function(e){
                var p = closest(this,'tr');
                p.parentNode.removeChild(p);
                e.preventDefault();
            }
        });

        // parentsUntil 测试调用
        var tip = queryElement('.tip')[0];
        var parents  = parentsUntil(tip,'.box-content',true);
        Array.prototype.forEach.call(parents,function(item){
            item.style.borderLeft = '2px solid #ff0000';
        });
    </script>
</body>
</html>

Springmvc处理json数据(spring json处理)

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function(){
	var params = '{"id": 1,"name": "测试商品","price": 99.9,"detail": "测试商品描述","pic": "123456.jpg"}';
	$.ajax({
		url : "${pageContext.request.contextPath }/json.action",
		data : params,
		contentType : "application/json;charset=UTF-8",//发送数据的格式
		type : "post",
		dataType : "json",//回调
		success : function(data){
			alert(data.name);
		}
		
	});
});
</script>

React学习-React中发送Ajax请求以及Mock数据

JavaScript开发注意事项(持续更新)

1 异步

  • 前端发送ajax请求获取数据时,返回的数据会在其它地方用到的话,应该将属性async设置成false,否则其它地方获取的数据为undefined,可能会导致其他错误。举例:

在selenium中使用AjaxElementLocatorFactory来优化PO模式

AJAX跨域解决方法(ajax跨域问题(三种解决方案))

跨域,简单地理解就是因为浏览器基于安全的同源策略限制不同域名和协议之间的互相访问。

而AJAX的跨域请求,其实浏览器并没有限制不同域的网络请求,只是浏览器会基于请求返回响应头做处理,如果发现是跨域请求且响应头Access-Control-Allow-Origin未对请求来源设置允许,则根据非同源禁止策略,浏览器不会将服务端返回的数据交给AJAX,这样就会阻止不同域之间的数据交互。

移动端商城购物车商品数量用Ajax技术管理实现

用户在管理购物车商品数据的时候,可以进行以下操作:

1、增加/减少商品数量。

2、全选或者选择某一条商品记录。

3、删除操作。

对已经选中的商品记录进行结算操作。

首先来看增加/减少商品数量的实现,用户手动增减商品购买数量的时候,Mysql数据库表记录也需要更新。为了提升用户体验,所有的操作都使用Ajax的方式异步操作。HTML代码结构如下:

为什么AJAX不能请求后端下载pdf和word等文档?

首先呢,ajax是的请求数据类型时json,html等形式,实际上是字符串类型,而不是流类型(二进制编码),所以后台不能响应下载操作,但是ajax可以读取后台返回的数据。

我使用jquery开发的轻量级web项目,但是有个需求是需要下载项目中计算出来的数据,并按一定排版排布生成pdf或者word文档。由于前端的插件下载的pdf布局比较受限,容易产生不清晰,乱码等问题,所以只能后台进行。既然ajax不能响应,我采取的方式是模拟表单点击,发送数据到后台,然后在后台进行排版并下载pdf。代码如下:

趣说Python爬虫06--Ajax数据爬取头条主页文章


上回我们说到Python大星

“试炼之路”历经九九八十一难

披荆斩棘

终于“立地成佛”

恭喜

Java面试题 ajax jsp(JAVA面试题经典)

二、 ajax jsp部分

1:ajax

(1)介绍

AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接