首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在具有相同类名的特定项上运行Javascript函数

仅在具有相同类名的特定项上运行Javascript函数
EN

Stack Overflow用户
提问于 2019-03-02 23:11:36
回答 2查看 202关注 0票数 0

在不使用jQuery的情况下,我如何才能仅在一个与其他项具有相同类名的项上运行函数?

我有一个WordPress循环,每个项目都有一个按钮,用于在div中的图像上运行函数。

下面是在页面上重复10次的循环项:

代码语言:javascript
复制
 <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
     <div class="block bg-white relative mt-7 work__image-wrap">
       <a href='<?php echo types_render_field("website-url"); ?>' target="_blank">
        <?php echo '<img class="item absolute pin-t w-full h-auto pin-l" src="'. $workitem .'" alt="'. the_title() .'"/>';?>
       </a>
      </div>
       <div class="button-wrap">
        <button id="portScroll">Scroll Down</button>
       </div>
       <div class="p-2">
        <h3 class="text-black font-bold pt-4 pb-2"><a class="text-black font-bold" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
       </div>
    </li>

当用户单击该按钮时,该函数会更改CSS,使其向上滚动。

如何仅在循环中的项上运行函数?

下面是我用来运行函数的JS。它在第一个循环项上工作得很好,但在其他循环项上就不行。

代码语言:javascript
复制
function scrollDown() {
    var portImg = document.getElementById('item');
    var height = portImg.clientHeight;
    console.log(height);
    var pos = 0;
    var id = setInterval(frame, 5);

    function frame() {
        if (pos == height) {
            clearInterval(id);
        } else {
            pos--;
            portImg.style.top = pos + 'px';
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-02 23:30:16

class替换按钮的id属性

代码语言:javascript
复制
<button class="portScroll">Scroll Down</button>

按如下方式定义按钮单击处理程序:

代码语言:javascript
复制
for (const button of document.querySelectorAll('button.portScroll')) {
    button.addEventListener("click", scrollDown);
}

在函数scrollDown中,如下所示获取图像:

代码语言:javascript
复制
var portImg = this.parentNode.parentNode.querySelector('img.item');

或者,或者:

代码语言:javascript
复制
var portImg = this.closest('li').querySelector('img.item');
票数 1
EN

Stack Overflow用户

发布于 2019-03-02 23:50:09

这就是我要做的(当然是简化的):

代码语言:javascript
复制
(function(){
  const posts = document.getElementsByClassName('post');
  for(let i = 0, m = posts.length; i < m; i++){
    const buttonElement = posts[i].getElementsByTagName("BUTTON")[0];
    buttonElement.addEventListener('click', handleButton);
  }
  function handleButton(e){
    scrollDown(e.target.dataset.postId);
  }
  function scrollDown(item) {
    var portImg = document.getElementById('post-image-' + item);
    console.log(portImg);
    var height = portImg.clientHeight;
    var pos = 0;
    var id = setInterval(frame, 5);

    function frame() {
        if (pos == height) {
            clearInterval(id);
        } else {
            pos--;
            portImg.style.top = pos + 'px';
        }
    }
}
})();
代码语言:javascript
复制
<div class="post">
  <img id="post-image-199">
  <button data-post-id="199">
    Click Me
  </button>
</div>
<div class="post">
  <img id="post-image-195">
  <button data-post-id="195">
    Click Me
  </button>
</div>
<div class="post">
  <img id="post-image-198">
  <button data-post-id="198">
    Click Me
  </button>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54959935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档