1. 程式人生 > >JQuery和Zepto的差異(部分)

JQuery和Zepto的差異(部分)

HA lock rac n-k pen IE http target div

1.width()/height()

  • Zepto.js: 由盒模型(box-sizing)決定

jQuery: 忽略盒模型,始終返回內容區域的寬/高(不包含 paddingborder

jQuery 官方的說明:

Note that .width() will always return the content width, regardless of the value of the CSS box-sizingproperty. As of jQuery 1.8, this may require retrieving the CSS width plus box-sizing property and then subtracting any potential border and padding on each element when the element has box-sizing: border-box

. To avoid this penalty, use .css("width") rather than .width().

解決方式就是在 jQuery 中使用 .css(‘width‘),而不是 .width()

這點上 jQuery 的處理方式是值得商榷的,比如下面的例子,$(‘.box‘).css(‘height‘) 仍然返回 20px,這不是扯蛋麽:

<style>
  .box {
    box-sizing: border-box;
    padding: 10px;
    height: 0;
  }
</style>

<div class="box"></div>
邊框三角形寬高的獲取

假設用下面的 HTML 和 CSS 畫了一個小三角形:

<div class="caret"></div>
.caret {
  width: 0;
  height: 0;
  border-width: 0 20px 20px;
  border-color: transparent transparent blue;
  border-style: none dotted solid;
}
  • jQuery 使用 .width().css(‘width‘) 都返回 0,高度也一樣;
  • Zepto 使用 .width() 返回 40,使用 .css(‘width‘)
    返回 0px

所以,這種場景,jQuery 使用 .outerWidth()/.outerHeight();Zepto 使用 .width()/.height()

2.offset()

    • Zepto.js: 返回 topleftwidthheight
    • jQuery: 返回 widthheight

$(htmlString, attributes)

  • jQuery 文檔
  • Zepto 文檔)
DOM 操作區別
$(function() {
  var $list = $(‘<ul><li>jQuery 插入</li></ul>‘, {
    id: ‘insert-by-jquery‘
  });
  $list.appendTo($(‘body‘));
});

jQuery 操作 ul 上的 id 不會被添加;Zepto 可以在 ul 上添加 id

事件觸發區別
$script = $(‘<script />‘, {
  src: ‘http://cdn.amazeui.org/amazeui/1.0.1/js/amazeui.min.js‘,
  id: ‘ui-jquery‘
});

$script.appendTo($(‘body‘));

$script.on(‘load‘, function() {
  console.log(‘jQ script loaded‘);
});

使用 jQuery 時 load 事件的處理函數不會執行;使用 Zepto 時 load 事件的處理函數會執行。

JQuery和Zepto的差異(部分)