jQuery style not being applied in Safari

2019-01-15 18:32发布

问题:

I have an absolutely positioned element that I move with the help of jQuery using the CSS propertly 'left'.

$("#element").css('left', '103px');

In Firefox this works as expected. However in Safari I can see the style appearing in the Web Inspector under element.style, but the style isn't updated. If I disable (and re-enable) any matched CSS-rules (even those not applied directly to my div) the style being applied with jQuery is rendered.

I'm running Safari 5.0.6 on an old PowerMac, with jQuery 1.7.2.

回答1:

I faced this problem once and i end up using addClass and removeClass on elements parent container.

try this

$("#element").css('left', '103px').parent().addClass("dummyClass").removeClass("dummyClass");

if that doesn't work follwoing will work for sure.

$("#element").css('left', '103px');
$("body").addClass("dummyClass").removeClass("dummyClass");

the problem is sometime safari doesn't redraw the page when we change CSS so we need to force redrawing



回答2:

!important should do the trick

$("#element").css('left', '103px !important');


回答3:

I had a similar problem implementing a video progress bar. The element I wanted to position let was inside a DIV with 'display:table-caption;' After reading @gaurang171 comment on td elements, I ended up having to remove that element from the div table and setting 'display:block;' and the element position updated without the need for the dummyClass. A div with display:block inside the table-caption did not work, it had to be outside of the table altogether.



回答4:

Well it works for me in safari 5.1.7

In my experience when .css() fails I try with .animate() with 0 as time (instant)

Try something like this and make me know if it worked (Tested in safari 5.1.7 and worked)

        $(document).ready(function(){
           $("#element").animate({
               left: '+=103px'
           }, 0);
        });