亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

限制 JavaScript 只能在元素內工作

限制 JavaScript 只能在元素內工作

一只名叫tom的貓 2023-12-19 16:16:01
是否可以僅在元素內部執行腳本? 例如,我有一個 <div> 元素列表,每個元素內部有兩個 <span> 。我用 JS 檢查是否有任何 div 有一個名為“boo”的類分配給它。如果是這樣,它應該添加一個類“hide”到具有類“child2”的<span>,如果沒有,則應添加類“hide”到另一個具有“child1”類的<span>。 這是我的意思的一個例子。<div> <span class="child1"></span><span class="child2"></span> </div><div class="boo"> <span class="child1"></span><span class="child2"></span> </div>如果我現在使用如下所示的腳本,它會弄亂整個列表,因為它還會添加“隱藏”類到其他元素。我該如何解決這個問題?var check = $("div").hasClass("boo");                  if (check === true) {                  $( ".child2" ).addClass("hide");                  }                  else {                    $( ".child1" ).addClass("hide");                  }
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

問題是因為您的代碼僅查看第一個 div 元素,以及所有 .child1 和 .child2 元素.


要解決此問題,請修改選擇器以根據是否存在(或缺少).boo 類進行選擇:


$('div.boo .child2').addClass('hide');

$('div:not(.boo) .child1').addClass('hide');

.hide { display: none; }

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

<div> 

  No boo

  <span class="child1">

    Child 1

    <span class="child2">Child 2</span> 

  </span>

</div>

<div class="boo">   

  Boo

  <span class="child1">

    Child 1

    <span class="child2">Child 2</span> 

  </span>

</div>

另請注意,如果這樣做僅是出于 UI 原因,那么您根本不應該使用 JS。單獨用CSS就可以實現:


div:not(.boo) .child1,

div.boo .child2 {

  display: none;

}

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

<div>

  No boo

  <span class="child1">

    Child 1

    <span class="child2">Child 2</span>

  </span>

</div>

<div class="boo">

  Boo

  <span class="child1">

    Child 1

    <span class="child2">Child 2</span>

  </span>

</div>

最后請注意,您的 span 元素缺少結束標記。我認為這只是問題中的一個拼寫錯誤,因此我在此示例中更正了它。



查看完整回答
反對 回復 2023-12-19
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

為此,您不需要 jQuery:


let children = document.querySelectorAll('div.boo .child2, div:not(.boo) .child1');


for (var j = 0; j < children.length; j++) {

  children[j].classList.add("hide");

}

您還錯過了 html 中的一些結束跨度標記,我假設這只是一個拼寫錯誤。


另外,如上所述,如果這只是一個演示問題,您可以使用簡單的 css 來完成此任務。


查看完整回答
反對 回復 2023-12-19
  • 2 回答
  • 0 關注
  • 174 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號