Вы можете использовать метод $.filter()
, чтобы получить то, что вы хотите:
$(":visible").filter(function(index){
return ( $.inArray( $(this).css('float'), ['left','right'] ) > -1 );
}).css({display:'inline'});
Это приведет к тому, что плавающие элементы будут превращены во встроенные элементы.
Демо : http://jsbin.com/utape3/edit
Хотя в документации jQuery указано , при использовании :visible
будут проблемы с производительностью, но это более эффективно, чем при использовании *
или body *
.
Сравнение производительности : http://jsperf.com/splat-vs-pseudo
Я не уверен в более быстром способе сделать это с помощью JavaScript.В тесте производительности вы заметите, что я использовал все, включая пользовательский селектор:
$.expr[':'].floated = function(obj) {
return ($.inArray($(obj).css('float'), ['left', 'right']) > -1);
};
$(":floated").css({display:'inline'});
Я действительно был только частично заинтересован в результатах этого метода, не будучи полностью знаком с тем, как внутренние устройства обрабатывают этот типселектора.
Необработанный JavaScript - намного быстрее
Я добавил к тестированию производительности следующее:
var els = document.getElementsByTagName('*');
for (var i = 0; i < els.length; i++) {
cssTxt = els[i].style.cssText;
if ((cssTxt.indexOf('float: left') > -1) || (cssTxt.indexOf('float: right') > -1)) {
els[i].style.display = 'inline';
}
}
Этот тест предполагает:
<p style="float:left">Foo</p>
<p style="float:right">Bar</p>
Это было собрано вместе, но смехотворно быстро по сравнению с предыдущими методами jQuery.