我有一个菜单按钮,点击后会向下滑动一个div。
我的菜单是标题“+打开菜单”
单击菜单按钮后,我的代码会将标题更改为“+菜单”,表示菜单已打开。
当用户关闭菜单时,我希望标题恢复为“ - 菜单”
这是我定义类的HTML,在这种情况下测试。
<span class="test">+ Open menu</span>
这是我的jQuery函数,我无法弄清楚如何恢复菜单状态。
$(document).ready(function () {
$(".widget_head_type").click(function ()
{
$(".widget_body_type").slideToggle("slow");
$(".test").text("- Close menu");
});
});
答案 0 :(得分:11)
$(".widget_head_type").click(function () {
$(".widget_body_type").slideToggle("slow");
($(".test").text() === "+ Open menu") ? $(".test").text("- Close menu") : $(".test").text("+ Open menu");
});
答案 1 :(得分:1)
jQuery.fn.extend({
toggleText: function (a, b){
var that = this;
if (that.text() != a && that.text() != b){
that.text(a);
}
else
if (that.text() == a){
that.text(b);
}
else
if (that.text() == b){
that.text(a);
}
return this;
}
});
用作:
$("#YourElementId").toggleText('After', 'Before');
答案 2 :(得分:1)
以下是基于http://api.jquery.com/toggle/
的有趣内容HTML
<span class="test">+ Open menu</span>
<span class="test" style="display:none">- Close menu</span>
JS
$(document).ready(function () {
$(".widget_head_type").click(function ()
{
$(".widget_body_type").slideToggle("slow");
$(".test").toggle();
});
简单,只需使用类测试切换所有标记,无论是隐藏还是可见。
答案 3 :(得分:0)
我已经猜到了你的HTML,并为替代品做了一些注释,但你考虑以下几点:
HTML:
<div class="some_parent_class">
<div class="widget_head_type">
<span class="test">+ Menu</span>
</div>
<div class="widget_body_type">
Body
</div>
</div>
JS:
jQuery(function ($) {
$('.widget_head_type').each(function () {
// closures
var $toggle = $(this);
var $parent = $toggle.closest('.some_parent_class');
var $target = $parent.find('.widget_body_type');
var $label = $toggle.find('.test');
var bIsTweening = false;
// OR var $target = $toggle.next('.widget_body_type');
// event methods (closures)
var fClickToggle = function () {
if (!bIsTweening) {
bIsTweening = true;
$target.slideToggle('slow', fToggleCallback);
}
};
var fToggleCallback = function () {
bIsTweening = false;
fSetLabel();
};
var fSetLabel = function () {
var sLabel = $label.text().replace('+', '').replace('-', '');
sLabel = ($target.is(':visible') ? '-' : '+') + sLabel;
$label.html(sLabel);
};
// handle event
$toggle.click(fClickToggle);
$target.hide();
fSetLabel();
});
});
答案 4 :(得分:0)
有同样的问题,这就是我解决它的方法:使用你的代码示例。
$(".widget_head_type").click(function () {
$(".widget_body_type").slideToggle("slow");
($(".test").text() == "+ Open menu") ? $(".test").text("- Close menu") : $(".test").text("+ Open menu");
});
使用两个相等的符号进行比较。