解释需要理解jQuery对象和偏移量

时间:2012-08-12 19:38:39

标签: jquery

所以,var $moving我们正在创建javascript对象,对吧?但是什么是$('<li/>')?它甚至不是一个HTML元素。

此外,偏移值描述了$this元素的值?那么,在元素#slidingMenu li:first的情况下呢?

var $menu = $("#slidingMenu");
var $selected = $menu.find('li:first');
var $moving   = $('<li/>',{
    className : 'move',
    top       : $selected[0].offsetTop + 'px',
    width     : $selected[0].offsetWidth + 'px'
});

4 个答案:

答案 0 :(得分:2)

  

所以,使用var $moving我们正在创建javascript对象,对吗?

不,您正在声明一个指向对象的JavaScript变量。

  

但是$('<li/>')是什么?它甚至不是一个HTML元素。

它返回一个jQuery对象。在这种特殊情况下,该对象包含一个尚未附加到DOM的HTML元素,第一个参数(<li>)中指定的类型以及第二个参数中指定的属性。

  

此外,偏移值描述了$this元素的值?那么,在元素#slidingMenu li:first的情况下呢?

不确定您在这里的内容,该代码中没有$this。但是,由于$selected引用了包含该元素的jQuery对象,并且您正在使用[0]语法来获取第一个(并且仅发生)元素,是的,它确实引用了那个元素。

答案 1 :(得分:2)

  • $("#slidingMenu");获取#slidingMenu的引用,$('#slidingMenu')返回一个jQuery对象。

  • $menu.find('li:first');找到li中的第一个#slidingMenu

  • $moving = $('<li/>', properties)表示,动态创建jQuery-wrapped li元素,但不会添加到DOM。对于more

  • $selected是对jQuery对象的引用,$selected[0]给出了一个元素引用/ JavaScript对象。但它并不意味着$selected[0]是对第一个对象的引用,{ {1}}到第二个等等。

答案 2 :(得分:1)

jQuery函数严重超载。这个特殊的重载需要一个HTML元素<li><li />,然后是一组要在该元素上设置的属性,创建jQuery包装的DOM元素并在其上设置这些属性。请注意,设置属性仅在字符串包含单个元素时才有效 - $("<a>text</a><div>otherel</div>", props)将无效。

关于第二点,jQuery将DOM元素包装在自己的对象中,使您可以访问其API。它的行为与数组类似,因此[x]将获得集合中的x元素。 $selected[0]将获得$selected集中的第一个(仅在此情况下)元素。

答案 3 :(得分:0)

$('<li/>')创建一个标记为li的空dom元素。是的,在这种情况下,$selected[0]将是元素#slidingMenu li:first.