我有一个父<div>
,#amwcontentwrapper
,其中有一系列divs
,其中包含自己的类和ID。
我想使用jQuery选择这些子divs
,如果他们有类.amwhidden
,则不执行任何操作,但如果没有,请删除.amwshown
类并添加{{ 1}} class。
这是我到目前为止所做的,但它不起作用。我想可能是我在父母中选择了孩子.amwhidden
。
有人能看到任何明显的问题吗?谢谢你的帮助。
divs
这是我正在使用的基本html:
if ($('#amwcontentwrapper > div').hasClass('amwhidden')){
} else {
$('#amwcontentwrapper > div').fadeIn(600, function(){
$('#amwcontentwrapper > div').removeClass('amwshown');
$('#amwcontentwrapper > div').addClass('amwhidden');
});
}
更新:在下面的评论中使用War10ck的解决方案(即<div class="amwshown" id="amwintro">
Intro Section, which should have the 'amwshown' class removed, and the
'amwhidden' class added, when the jQuery runs. Currently, this does not happen.
</div>
)我已按照自己的意愿设法改变了课程。但是,那些已经删除了.amwshown类和添加.amwhidden类的那些仍然显示在页面上,尽管CSS看起来像这样:
$('#amwcontentwrapper > div.amwshown')
看看开发工具,看起来,当运行jQuery(在单击事件上)时,类正在改变,但是添加了.amwhidden {
display:none;
}
.amwshown {
display:block;
}
类的任何类(因此在页面上显示它们) )还添加了.amwshown
标记,使其成为<style>
当我按下另一个按钮时,该按钮会隐藏前面提到的display:block;
以便为另一个按钮让路,该类正在更改为<div>
,但.amwhidden
标记不是删除,所以即使它有<style>
类,它仍然在页面上。
我在这里创建了一个JSFiddle,如果还有人想帮忙的话!
`
.amwhidden
&#13;
$(document).ready(function() {
$('#buybutton').click(function() {
$('#amwcontentwrapper > div.amwshown').fadeIn(600, function() {
$(this).removeClass('amwshown').addClass('amwhidden');
});
if ($('#amwbuy').hasClass('amwshown')) {} else {
$('#amwbuy').fadeIn(600, function() {
$('#amwbuy').removeClass('amwhidden');
$('#amwbuy').addClass('amwshown');
});
}
});
$('#phdbutton').click(function() {
$('#amwcontentwrapper > div.amwshown').fadeIn(600, function() {
$(this).removeClass('amwshown').addClass('amwhidden');
});
if ($('#amwphd').hasClass('amwshown')) {} else {
$('#amwphd').fadeIn(600, function() {
$('#amwphd').removeClass('amwhidden');
$('#amwphd').addClass('amwshown');
});
}
});
});
&#13;
#sidebar {
position: absolute;
left: 1%;
top: 1%;
font-size: 5em;
color: #000000;
width: 10%;
display: block;
background-color: red;
}
#amwcontentwrapper {
position: absolute;
left: 20%;
top: 5%;
}
.amwshown {
display: block;
}
.amwhidden {
display: none;
}
&#13;
`
答案 0 :(得分:1)
您可以使用not
删除不需要的元素,例如:
$('#amwcontentwrapper > div').not('.amwhidden')
.removeClass('amwshown')
.addClass('amwhidden');
并与之合作。
答案 1 :(得分:1)
试试这个
$(document).ready(function() {
$("#amwcontentwrapper").children().each(function(elem, x) {
if ($(x).attr("class") == "amwhidden") {
alert($(x).attr("class"));
$(x).removeClass("amwhidden").addClass("amwshow");
alert($(x).attr("class"));
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="amwcontentwrapper">
<div class="amwhidden"></div>
<div></div>
<div></div>
</div>
&#13;
答案 2 :(得分:0)
您可以尝试以下各项,
$("#amwcontentwrapper div").each(function(){
if($(this).hasClass('amwhidden'))
//DO something
else
//DO something
});
答案 3 :(得分:0)
感谢您的帮助,它促使一些头脑风暴解决了这个问题。
我没有添加.amwhidden
类并使用jQuery删除。amwhidden
类,而是创建了一个.amwsection
类,其中所有部分都属于具有初始{display
的类。 1}} none
的值。到现在为止还挺好;加载页面时,所有部分都不存在。
然后我使用.css
jQuery函数在单击相应按钮时将display:none
更改为display:block
,并将所有其他.amwsections
更改为display:none
。这很好用,但效果非常突然;如果你使用了.animate
函数,就没有消失了。但是,.animate
不适用于display
值。
.fadeOut
和.fadeIn
来救援!通过将.css更改包装在这些中,我可以创建淡入/淡出效果,并且仍然可以使用display
值。
以下是此代码的一个示例。
#buybutton
是要按的按钮。#amwintro
只是在页面加载时出现的内容 - 现在将设置为display:none如果这是第一个按下的按钮。.amwsection
所有隐藏的部分。这部分代码只是重置了所有代码。这个和#amwintro
部分发生得很快(1/100秒),以保持良好的响应时间。#amwbuy
是我要透露的特定部分。正如您所看到的,这会在较长时间内消失。 目前只在Chrome中测试过,但我想我已经得到了它!
$(document).ready(function () {
$('#buybutton').click(function() {
$('#amwintro').fadeOut(1, function() {
$(this).css({
display:'none',
});
});
$('.amwsection').fadeOut(1, function() {
$(this).css({
display:'none',
});
});
$('#amwbuy').fadeIn(600, function() {
$(this).css({
display:'block',
});
});
});
});