jq设置left

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jq设置left相关的知识,希望对你有一定的参考价值。

$("ul li").first().css("left",nL);为什么设置这个left值怎么设置都不成功?

参考技术A $("ul li").first().css("left",nL+"px");追问

试过,没用

追答

方法一:
console.log(nL); 看一看是否获得了值
若有值,就是你的ul li 的样式中看看有没有 position:absolute; 没有添加上,保证left有效;或者float:left;
方法二:var nL = $('ul li').last().position().left;
$("ul li").first().css("left",nL+"px");

追问

我在这一句上面alert(nL)有数值,position也有,方法二最开始就试了也不行,最关键的是我直接输一个数值进去他都不变,这是什么情况?

追答

你可以百度一下,CSS样式position这个定位属性,
如果你的position设置的是absolute,那么你的css("left",12232),才会生效。
如果不是,你再设置一下,position:absolute;
如果还是不行,那我帮不了你

追问

不是这个问题,感觉是animate()这个方法延时的问题,我把animate()的动画时间设置为0就可以了,但是只要有设置时间,就会出问题

追答

你要做的效果是
点击button,第一个li和最后一个li不动,其他所有的Li都往左迁移110px;
如果是,这样写
$('.btn input').eq(0).click(function()
var len=$("ul li").length;
$('ul').children('li').each(function(i)
if(i !=0 && i!=len-1)
$(this).animate("left":$(this).position().left-110+"px");



);

);

参考技术B 检查一下元素 看一下left值有没有发生变化
如果有,检查一下是否被其他css 覆盖住了追问

感觉是animate()这个方法延时的问题,我把animate()的动画时间设置为0就可以了,但是只要有设置时间,就会出问题,但是想不出要怎么解决这个问题

追答

出什么问题.....

追问

别人告诉我说是animate()方法异步的原因,animate()执行同时后面的程序也在同时运行了,所以下面那个没效果,所以我想在最后一次循环后面添加个回调函数来执行。现在我有个问题是怎么判断$(this)执行的元素和最后一个li是同一个元素?要怎么处理呢?

追答

对的 animate确实是异步的
each方法中 是有参数的,可以通过这个来实现
var length = $("ul li").length(); //获取所有li的 总数
$("ul li").each(function(i,item)
//i 表示 循环的下标,item 表示当前循环的对象(注意这里是原生js的对象)
if(i == length-1) //表示最后一个元素


)

追问

嗯,现在的确是用下标来的,我想知道要是如果想判断$(this)和最后一个是不是同一个元素得用什么方法,网上找了半天都没找到

追答

Jquery 没有像JAVA那样比较对象的方法的
大多都是使用标记来识别的
使用class 给最后一个li class="last"
if($(this).hasClass())
或者自定义属性来识别

本回答被提问者采纳

以上是关于jq设置left的主要内容,如果未能解决你的问题,请参考以下文章

jq怎样获取元素样式的数值

JQ——设置值DOM对象和JQ对象的转换

js,jq设置获取属性,样式

jq获取和设置标签的css样式jq给标签增加或移除class属性

jq checked 设置问题

jq实现剪裁图片设置为头像