我正在打破如何获得一个特定的孩子div id,哪个样式是块; 我一直在google搜索和stackoverflow浏览漏洞的日子。
我可以使用以下方式让所有孩子:
var active = $('#myDiv').children().get();
但我不知道如何过滤风格。 .get()之后不允许使用.attr()。 所以,我只想知道我需要在之后使用它的id。
编辑:
这是我想要使用的完整功能:
// ON MODAL DISMISS, RESET STEPS
$('#myDiv').on('hidden', function() {
var currentStep = $('#myDiv').children().filter(function(){
return $(this).css('display') === 'block';
});
//console.log(currentStep);
replace(currentStep, step1);
});
function replace( hide, show ) {
document.getElementById(hide).style.display="none";
document.getElementById(show).style.display="block";
}
HTML:
<div id="myDiv">
<div id="step1">
...
</div>
<div id="step2">
...
</div>
<div id="step3">
...
</div>
</div>
目前,当我启动模态并完成步骤,但决定在步骤3中关闭模态并重新启动模态时,它将继续执行步骤3。因此我认为在解雇之前我需要当前的步骤,所以我可以将它发送到我的替换函数并将currentStep的样式设置为none,并阻止第一步。
答案 0 :(得分:5)
尝试此操作以返回块子项:
$('#mydiv').children().filter(function () {
return $(this).css('display') === 'block';
});
这将仅返回在该函数中返回true
的子项。
<强>更新强>
首先,如果你已经在使用jQuery,为什么还要使用长手原始的JS选择过程呢?而不是
function replace( hide, show ) {
document.getElementById(hide).style.display="none";
document.getElementById(show).style.display="block";
}
更改为
function replace(hide, show) {
$('#' + hide).hide();
$('#' + show).show();
}
此外,看起来似乎只有一步(currentStep
)一次显示。既然你试图找到所显示的一个元素,为什么不设置你的css说:
#mydiv div {
display: none;
}
#mydiv div.show {
display: block;
}
然后你可以删除/添加类来显示/隐藏它们。使用此方法,您的replace()
函数可能如下所示:
function replace(show) {
$('#mydiv div.show').removeClass('show'); // reset all shown children to be hidden
$('#mydiv ' + show).addClass('show'); // same way you determine which div should show
}
答案 1 :(得分:1)
你想要的奇怪的事情......试试这个
var active = $( '#myDiv' ).children().filter( function() {
return 'block' == $(this).css( 'display' );
} );
答案 2 :(得分:0)
这可能有助于过滤元素:http://api.jquery.com/filter/
答案 3 :(得分:0)
这里是a small demo,它包含所有块元素,包括本机块元素。
$(selectedElements).filter(function(){
return $(this).css('display') === 'block';
});