jQuery после show() предполагает, что display:inline имеет значение:hidden. Зачем?
В jQuery 1.4.2: скрытый фильтр не отфильтровывает скрытые элементы, но я сделал их видимыми, вызвав show(). Фильтр предполагает, что он все еще скрыт.
Это ошибка или я что-то упустил? Рассмотрим следующий код:
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").css("display")
"none"
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").show()
Object
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").css("display")
"inline" // ?? Let me scratch my head...
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").is(":hidden")
true //element with "display:inline", visible in browser, but yet it is hidden
Вместо "inline" вы ожидаете "none", потому что: был использован скрытый фильтр.
То, что он делает, это из массива объектов, он выбирает первый скрытый элемент. Каждый раз, когда я вызываю эти строки кода, я ожидаю, что они выберут следующий скрытый элемент (а не тот, который я только что показал).
1 ответ
Ваш код будет правильным, если предположить, .show()
произошло линейно. тем не мение .show()
запускает анимацию, которая заканчивается отображаемым объектом. Если вы хотите выполнить код после его показа, используйте альтернативную форму с длиной анимации и обратным вызовом .show(100,function(){})
,