Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:在保留子元素的同时单击更改文本和类_Jquery_Text_Toggle_Children_Toggleclass - Fatal编程技术网

jQuery:在保留子元素的同时单击更改文本和类

jQuery:在保留子元素的同时单击更改文本和类,jquery,text,toggle,children,toggleclass,Jquery,Text,Toggle,Children,Toggleclass,我试图用jQuery做一个简单的“切换”式函数,但我似乎无法让它以正确的方式工作 我有一个HTML块,如下所示: <li class="item-actions-follow"> <a href="#" id="follow" class="icon small-icon circle_plus"> <i></i> Follow </a> </li> $("a#fol

我试图用jQuery做一个简单的“切换”式函数,但我似乎无法让它以正确的方式工作

我有一个HTML块,如下所示:

<li class="item-actions-follow">
    <a href="#" id="follow" class="icon small-icon circle_plus">
        <i></i>
            Follow
    </a>
</li>
$("a#follow").toggle
function() {
$("a#follow").text("Unfollow");
$(this).removeClass('circle_plus').addClass('circle_minus').stop();
      },
      function() {
        $("a#follow").text("Follow");
        $(this).removeClass('circle_minus').addClass('circle_plus').stop();
      });
这确实将文本“Follow”更改为“Unfollow”,但在我再次单击链接时没有返回它删除了标签
,该标签主要用于显示圆圈加类提供的图标

我还尝试了纯切换(后来我发现切换函数不适用于文本,而只适用于属性),如下所示:

<li class="item-actions-follow">
    <a href="#" id="follow" class="icon small-icon circle_plus">
        <i></i>
            Follow
    </a>
</li>
$("a#follow").toggle
function() {
$("a#follow").text("Unfollow");
$(this).removeClass('circle_plus').addClass('circle_minus').stop();
      },
      function() {
        $("a#follow").text("Follow");
        $(this).removeClass('circle_minus').addClass('circle_plus').stop();
      });
当我这样做,并点击链接,它只是“淡出”文本和图标一起,甚至没有改变类

我还尝试了
.toggleClass()
函数,但没有成功

我对jQuery比较陌生,所以这可能是一项简单的任务,但我一直在寻找解决方案,但迄今为止运气不佳


希望您能帮我指出正确的方向。

将文本包装在span:
follow

我会用老办法:

$('#follow').click(function() {
    if ($(this).hasClass('circle_plus')) {
        $(this).removeClass('circle_plus').addClass('circle_minus').find('span').text('unfollow');
    }
    else {
        // vice versa
    }
});

因为您没有将该元素包装到另一个元素中,所以其中有空内容

只需添加
.trim()

这应该很好

$('#follow').on('click', function () {
    var $elem = $("#follow");
    $elem.text().trim() === 'Follow' ? $elem.text('UnFollow')
                                     : $elem.text('Follow');
    $elem.toggleClass('circle_plus circle_minus')
});

或者,您可以这样做,减少您的
js
“开销”(虽然很少)。如您所见,我对标记做了一些更改

HTML:

<li class="item-actions-follow"> <a href="#" id="follow" class="icon small-icon">
        <span class="circle_plus">
            <i></i>
            Follow
        </span>
        <span class="circle_minus">
            <i></i>
            UnFollow
        </span>
    </a>    
</li>

是否将其包装在单击函数处理程序中? 看看这把小提琴,它正在工作

HTML

CSS

JS


你能提供一个有效的例子吗?
#follow.circle_plus{background-color:red;}
$("a#follow").click(function(){
var link = $("a#follow");
var text = link.text() == 'Follow' ? 'Unfollow' : 'Follow';
link.text(text);
link.toggleClass('circle_plus');
return false;});