【问题标题】:How to apply class function on id function?如何在 id 函数上应用类函数?
【发布时间】:2018-10-29 09:49:42
【问题描述】:

所以我的任务是为每个段落(其中五个)制作功能(显示/隐藏),我确实喜欢这样做

function btn() {
    var x = document.getElementById('para');
    if (x.style.display == "none") {
        x.style.display = "block";
    } else {
        x.style.display = "none";
    }
}

对于每个段落,我都使用 Id 而不是 class。因为任务说每个段落一个按钮。

现在我遇到了一个问题,如何同时为所有这些(颜色)函数应用这个(颜色)函数。

function color() {
    bgColorCode = '#' + Math.floor((Math.random() * 999999) + 100000);
    elements = document.getElementByClassName('color');

    for (var i = 0; i < elements.length; i++) {
        document.getElementByClassName('color')[i].style.backgroundColor = bgColorCode;
    }
}

//Html
<button onclick = "color()">Color</button>
<button onclick = "btn()">Show/Hide</button>
<p id = "para"> Example 1 </p>

<button onclick = "btn2()">Show/Hide</button>
<p id = "para2"> Example 2 </p>
...

我知道如何将此函数“颜色”应用于我所有的段落,因为它们在 id 下?

有什么解决办法吗?

【问题讨论】:

  • 包含你的html
  • 改用jquery的显示/隐藏功能
  • @NileshJain OP 正在使用 vanilla JS - 他们无法访问 jQuery 的功能。
  • 我刚开始学html/css/js语言,学完jquery以后会应用

标签: javascript html


【解决方案1】:

如果您将类 color 添加到您的 para 元素并将函数 getElementByClassName() 更改为 getElementsByClassName()(您忘记了 s)。然后你的代码工作。在 for 循环中,您可以使用元素数组 elements[i] 而不是再次调用 getElementsByClassName() 函数。

function color() {
  bgColorCode = '#' + Math.floor((Math.random() * 999999) + 100000);
  elements = document.getElementsByClassName('color');

  for (var i = 0; i < elements.length; i++) {
    elements[i].style.backgroundColor = bgColorCode;
  }
}

//just slightly modified so it works with multiple paragraphs by making the id a function parameter.
function btn(id) {
  var x = document.getElementById(id);
  if (x.style.display == "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}
<button onclick="color()">Color</button>
<button onclick="btn('para')">Show/Hide</button>
<p class="color" id="para">Example 1</p>

<button onclick="btn('para2')">Show/Hide</button>
<p class="color" id="para2">Example 2</p>

【讨论】:

  • @BeginnerAlibi 很高兴我能帮上忙。如果这是您的最佳解决方案,请接受它作为答案,以便人们知道您的问题已得到解答。如果其他答案之一更适合您,那么当然接受那个答案。
【解决方案2】:

希望这是你想要的。如果您有任何疑问,请告诉我。

函数toggleshow(htmlObj) 选择触发函数的元素的下一个同级元素,其参数this 表示当前HTML 元素,如果style.display 的值设置为none,则将其值更改为block 否则改为none

HTML DOM manipulation

第二个函数color() 采用高级参数,即HTML 元素的(string)id,并循环遍历所有传递的参数并为每个id 更改bgcolor。您可以根据需要传递许多参数。

this

document.querySelector('css selector') 使用 css 选择器

选择第一个 html 元素

function toggleshow(htmlObj){
  var par = htmlObj.nextElementSibling;
  if(par.style.display !== 'none'){
    par.style.display = 'none';
  }else{
    par.style.display = 'block';
  }
}

function color(){
  
  bgColorCode = '#' + Math.floor((Math.random() * 999999) + 100000);

  for (var i = 0; i < arguments.length; i++) {
      document.querySelector('#'+arguments[i]).style.backgroundColor = bgColorCode;
  }
}
button{
  display:block
}
<button onclick = "color('para', 'para2', 'para3', 'para4', 'para5')">Color</button>

<button onclick = "toggleshow(this)">Show/Hide</button>
<p id = "para"> Example 1 </p>

<button onclick = "toggleshow(this)">Show/Hide</button>
<p id = "para2"> Example 2 </p>

<button onclick = "toggleshow(this)">Show/Hide</button>
<p id = "para3"> Example 2 </p>

<button onclick = "toggleshow(this)">Show/Hide</button>
<p id = "para4"> Example 2 </p>

<button onclick = "toggleshow(this)">Show/Hide</button>
<p id = "para5"> Example 2 </p>

*抱歉我的英语不好和拼写错误。

【讨论】:

  • 您应该解释您的代码,以便 OP 了解问题和解决方案,而不是只记住操作方法 :)
  • 这个也可以,更好,我能理解,谢谢
  • 我知道,我应该解释解决方案,但我不善于解释。
【解决方案3】:

使用 JQUERY 的更好、更动态的解决方案:

*如果您不知道如何使用 Jquery,那么您可以查看 Mark Ba​​ijens 的答案。

function btn(e) {
    if ($(e).next().css('display') == "none") {
      $(e).next().show()
      $(e).html("Hide")
    } else {
      $(e).next().hide()
      $(e).html("Show")
    }
}

function color() {
    bgColorCode = '#' + Math.floor((Math.random() * 999999) + 100000);
    //elements = document.getElementByClassName('color');

    $(".para").css("background-color",bgColorCode)
}
<div>
<button onclick = "color()">Color</button>
</div>
<hr>
<div id="wrapper">
<button onclick = "btn(this)">Show/Hide</button>
<p class="para"> Example 1 </p>
<hr>
<button onclick = "btn(this)">Show/Hide</button>
<p class="para"> Example 2 </p>
<hr>
<button onclick = "btn(this)">Show/Hide</button>
<p class="para"> Example 3 </p>
<hr>
<button onclick = "btn(this)">Show/Hide</button>
<p class="para"> Example 4 </p>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>

【讨论】:

  • 问题被标记为 JavaScript 而不是 jQuery - 不是每个人都想使用它(并且出于某种充分的理由)
猜你喜欢
  • 2022-08-17
  • 2021-05-23
  • 1970-01-01
  • 2022-07-06
  • 2014-07-16
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多