使用条件语句切换此innerHTML的正确方法是什么?

时间:2018-05-18 15:05:06

标签: javascript jquery

基本上当div显示或隐藏时,我想分别用“+”(隐藏时)和“ - ”(显示时)切换innnerHTML。它最初工作,但不是随后。

$('#summary-head').click(function(evt) {
    evt.preventDefault();
    $('#summary-bod').slideToggle(1000);
    $(this).toggleClass('close');
    if(document.getElementById('summary-head').innerHTML = "-  Professional Summary") {
        document.getElementById('summary-head').innerHTML = "+  Professional Summary";
    } else {
        document.getElementById('summary-head').innerHTML = "-  Professional Summary";
    };
});

这样做的正确方法是什么?这不起作用。

5 个答案:

答案 0 :(得分:2)

为什么不使用CSS:



hidden

$(document).ready(function(){
     $('.wrapper').click(function(){
          $(this).toggleClass('switch');
     });
});

.wrapper .content2{
   display:none;
}

.wrapper.switch .content2{
    display:block;
}

.wrapper.switch .content1{
    display:none;
}




jquery只是添加或删除了一个css类,css规则执行其余的

答案 1 :(得分:1)

最简单的方法是将+ / -图标放在元素中自己的span中。然后,您可以为text()提供基于当前更新新设置的功能。像这样:

$('#summary-head').click(function(e) {
  e.preventDefault();
  $('#summary-bod').slideToggle(1000);
  $(this).toggleClass('close').find('span').text(function(i, t) {
    return t.trim() == '+' ? '-' : '+';
  });
});
#summary-bod { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="summary-head">
  <span>+</span>
  Professional Summary
</div>
<div id="summary-bod">
  Foo bar
</div>

请注意,使用jQuery时,最好坚持使用它公开的方法,而不是混合和匹配本机方法。在这种情况下,无论如何它们都是多余的,因为您已经通过this关键字引用了点击的元素。

答案 2 :(得分:0)

您在if语句中为innerHTMl分配值。试试这段代码:

@Test
public void metaspaceTest() throws CannotCompileException, InterruptedException {

ClassPool cp = ClassPool.getDefault();
System.out.println("started");

for (int i = 0; i <= 100000; i++) {
    Class c = cp.makeClass("br.com.test.GeneratedClass" + i).toClass();
    Thread.sleep(1);
    if (i % 10000 == 0) {
    System.out.println(i);
    }
}

System.out.println("finished");
}

答案 3 :(得分:0)

利用简单的css对利亚姆的回答略有不同。 ~表示直接寻找以下兄弟(。)。

.hide { display: none; }

.contentState:checked ~ .collapse {
  display: inline-block;
}

.contentState:not(:checked) ~ .expand {
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="content">
    <input type="checkbox" id="professionalSummaryState" class="contentState hide" style="display:none;">
    <span class="collapse hide">-</span>
    <span class="expand hide">+</span>
    <label for="professionalSummaryState">Professional Summary</label>
  </div>
</div>

答案 4 :(得分:0)

您的代码中存在错误。比较语句应使用&#34; ==&#34;,而不是&#34; =&#34;。尝试使用&#34; =&#34;这是一个非常常见的错误。比较 - 不要!

尝试以下方法:

<html>

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>

<div id = "summary-div">
  <span id ="summary-head">+  Professional Summary</span><br/>
    <div id = "summary-bod">
    This is a summary body
    </div>
</div>

<script>
$('#summary-head').click(function(evt) 
{
  evt.preventDefault();
  $('#summary-bod').slideToggle(1000);
  $(this).toggleClass('close');

  if (document.getElementById('summary-head').innerHTML == "-  Professional Summary") 
  {
    document.getElementById('summary-head').innerHTML = "+  Professional Summary";
  } 
  else 
  {
    document.getElementById('summary-head').innerHTML = "-  Professional Summary";
  };
});
</script>

</body>
</html>

也只是一个样式注释 - 这是个人偏好 - 恕我直言,如果您使用布尔标志来指示是否显示&#34; + text&#34;或者&#34; - 文字&#34 ;;在IF语句中设置/清除该标志,并根据标志而不是span / label / UI元素的内部html做出决定。另一个程序员可能会在以后更改并更改UI元素的文本(例如&#34; Executive Professional Summary&#34;而不是&#34; + Professional Summary&#34;)而没有意识到您已经在其他地方获得了代码取决于文字。在UI中更改文本不应该破坏代码。只是我的两分钱&#39;值得。