zoukankan      html  css  js  c++  java
  • jQuery 动态元素添加

    有这么一道题    

    <!DOCTYPE html>
    <head>
    <title>前端工程师面试题</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <!-- <script type="text/javascript" src="http://files.cnblogs.com/darkangle/list.js"></script>
    -->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript" src="forTestJQ.js"></script>
    <style>
    *{padding:0;margin:0;}
    a{outline:none;text-decoration:none;}
    body{font: 14px/1.5 arial}
    .w960{width:560px;margin:0 auto;}
    .hd{background: #059ed3;color:#fff;}
    .hd,.ft{padding:5px;}
    .ft{background:#ccc;text-align:right;}
    .row{padding:5px;border-bottom:solid 1px #eee;}
    .row div{display:inline}
    .row a{float:right;}
    .ft a{color:green;font-weight:bold}
    code{display:block;border:solid 1px #666;padding:10px;background:#ffffc0;}
    h3{margin:10px 0;color:#ff9900;}
    input{border:solid 1px #c0c0c0;line-height:1.5em;height:1.5em}
        </style>
    </head>
    <body>
    <div class="w960">
    <h3>第一题:请使用Javascript实现以下动态效果</h3>
    <p>可以使用任何你喜欢的方式和库,尽量使用你认为优雅的实现,并在代码完成说简要说明此方案的优点和不足。</p>
    <div id='msg'></div>
    <div id="datalist">
      <div class="hd">
        现在一共有: <strong class="item_count"></strong>
        个条目
      </div>
      <div class="list">
        <div class="row">
          <div>这是第一条</div>
          <a href="javascript:;">修改</a>
        </div>
        <div class="row">
          <div>这是第二条</div>
          <a href="javascript:;">修改</a>
        </div>
        <div class="row">
          <div>花儿为什么这样红?</div>
          <a href="javascript:;">修改</a>
        </div>
        <div class="row">
          <div>你知道小月月是哪个不?</div>
          <a href="javascript:;">修改</a>
        </div>
        <div class="row">
          <div>人生就是一个杯具</div>
          <a href="javascript:;">修改</a>
        </div>
      </div>
      <div class="ft">
        <a href="javascript:;">新增条目</a>
      </div>
    </div>
    
    </div>
    </body>
    </html>

    我的答案

    $(function() {
        countItems();
        changeListener();
        newItem();
        inputBlur();
        //okButton();
    });
    
    function countItems() {
        var total = 0;
        $('#datalist .list .row').each(function(index, val) {
            /* iterate through array or object */
            total++;
        });
        $('strong.item_count').text(total);
    }
    
    function changeListener() {
        //所有通过动态方式增添的元素得选择器都在on()中得第二个参数中
        //$('xxx')这里面只对静态元素有效
        $('#datalist .list ').on('click', '.row a',function(event) { // 为了使动态创建的元素也能应用
            event.preventDefault();
            var self = $(this);
            var str = $(this).prev('div').text();
            $(this).prev('div').text('');
            //创建新元素 http://blog.sina.com.cn/s/blog_6f816c050100mzf2.html
            // pre.append(next)    inner.appendTo(wrapper)
            $('<input>', {
                type: 'text',
                val: str,
            }).appendTo(self.prev('div'));
            //这里用$(this)也是可以的 是因为appendTo()里面并不是function  所以$(this)并不会指向input
        });
    }
    
    function newItem() {
        $('#datalist .ft a').click(function(event) {
            /* Act on the event */
            var item = '<div class="row"><div><input type="text" value="" /></div><a class="ok" href="javasript:;">ok</a></div>';
            $(item).insertAfter('#datalist .list .row:last');
            //前面这里还可以写为 $('<p>xxx<p>').insertAfter('xxxx')
        });
    }
    
    function inputBlur() {
        $('#datalist .list ').on('focusout','.row input', function(event) {
            event.preventDefault();
            var self=$(this);
            self.parent().next('a').text('修改')
            var str = self.val();
            self.parent().text(str);//之后input已经被消去
            $('#msg').text(self.parent().text());//之后再用self就没有用了 因为元素已经被消去了
        });
    }
    
    function okButton() {
        $('#datalist .list ').on('click', '.row a.ok',function(event) {
            alert('ok');
            // var str=$(this).prev().children('input:first').val();
            // $(this).prev().text(str);
            // $(this).prev().children('input').remove();
        });
    }

     其中 $('#datalist .list ').on('focusout','.row input', function(event) {

    通过 https://api.jquery.com/on/  看到动态元素的blur和focus  应该使用 focuesout  和 focusin

  • 相关阅读:
    windows安装pkg-config
    完美解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题
    iOS 解析RFC3339时间格式
    依赖工程开发,编译报错Command Libtool failed with a nonzero exit code
    移除项目中的UIWebView
    输出手机中的字体与常用的苹方字体名称
    Null passed to a callee that requires a non-null argument
    SDK内本地化处理 localizedStringForKey:value:table:
    iOS [AFHTTPSessionManager GET:parameters:progress:success:failure:]: unrecognized selector sent to
    xcode搜索路径缩写
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3602541.html
Copyright © 2011-2022 走看看