自动添加文本的最佳jQuery方法

时间:2014-08-01 20:13:17

标签: jquery css

我还在学习jQuery,并且一直在玩一些东西作为练习。我有这个工作:

<!DOCTYPE HTML>
<html>
<head>
<title>New Site</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>    
<body>    
<ul class="accmenu">
  <li><a href="#">Item 1</a><span> +</span>
<ul>
      <li><a href="#">Item 1 a</a></li>
      <li><a href="#">item 1 b</a></li>
    </ul>
  </li>
  <li><a href="#">Item 2</a></li>
  <li><a href="#">Item 3</a><span> +</span>
<ul>
      <li><a href="#">Item 3a</a></li>
      <li><a href="#">Item 3b</a></li>
      <li><a href="#">item 3c</a></li>
    </ul>
  </li>
  <li><a href="#">Item 4</a></li>
</ul>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script type="text/javascript">

$(".accmenu li ul").hide();
$( document ).ready(function() {

$(".accmenu li").toggle(function(){
//    $(".accmenu li ul").slideDown();
    $(this).children("ul").slideDown(); 
    $(this).children("span").html( " -" );
},function(){
//    $(".accmenu li ul").slideUp();
    $(this).children("ul").slideUp();   
    $(this).children("span").html( " +" );  
});

});    
</script>    
</body>
</html>

我的问题是在我手动添加的每个父母的末尾:

<span> +</span>

是否有一种可行的方法来实现这一点,相应的 - 通过jQuery自动发生?没有将实际跨度写入代码?

基本上我希望jQuery在它下面找到每个带有ul的li,并在li的文本末尾添加“+”或“ - ”,具体取决于它是否折叠。

我看了jQuery附加的可能性,但我不想继续添加...基本上我希望+/-自动发生,并在菜单向上/向下滑动时切换。

3 个答案:

答案 0 :(得分:2)

您实际上可以通过向ul本身添加ul伪元素来避免检查子:beforehttp://jsfiddle.net/tarabyte/8v9Bw/

CSS

/*hide content and disc*/
.accmenu > li {
    overflow: hidden;
    list-style-type: none;
}

/*moves +/- to the left of the link*/
.accmenu > li > a {
    overflow: hidden;
    float: left;
}

/*closed menu item*/
.accmenu > li > ul:before {
    content: '+';
}

/*opened menu item*/    
.accmenu > li.active > ul:before {
    content: '\2013';
}

/*height animation effect !requires prefixes and modern browsers.*/    
.accmenu > li > ul {    
    max-height: 0;
    transition: max-height 0.5s ease-out;
}

.accmenu > li.active > ul {    
    max-height: 100px;
}

答案 1 :(得分:0)

基本上,使用CSS添加加号并使用Javascript来切换类。

试试这个: JSFiddle

ul {
width: 200px;
padding: 0;
margin: 0;
list-style: none;
}

ul li {
min-height: 0;
}

ul li.active {
min-height: 30px;
}

ul li:after {
content: "+";
float: right;
}

ul li.active:after {
content: '-';
}


<ul>
<li>Parent 1</li>
<li>Parent 2</li>
</ul>

$('li').click(function () {
$(this).toggleClass('active');
});

答案 2 :(得分:0)

您需要使用toggleClass()功能。

请在您的代码中添加以下内容:

JQuery的

$('a').click(function(){debugger;
$(this).toggleClass("pclass nclass" )
}); 

CSS

.pclass:after{
    content: "+";
} 

.nclass:after{
    content: "-"
}

创建 fiddle