javascript - 如何使用 PrototypeJS 检查一个元素是否在另一个元素之后?

标签 javascript css-selectors prototypejs

这是我的 HTML 代码:

<ul class="tabs">
    <li>Test</li>
    <li>Test</li>
    <li>Test</li>
    <li class="test">Test</li>
    <li>Test</li>
</ul>

这是我尝试过的:

 $$('ul.tabs > li').each(function(item,index){
       if ($(item).isAfter(".test")){
           alert(1);
       }
 });

但这显然行不通。

我想添加到类 test 元素之后的所有列表项。我怎样才能做到这一点?

最佳答案

您可以利用Element.previousSiblings

$$('ul.tabs li').each(function(item,index){
     if (item.previousSiblings().any(siblingHasClassTest)){
       alert(1);
     }
});
function siblingHasClassTest(sibling) { 
  return sibling.hasClassName('test');
}

有关演示,请参阅this plunker或下面的代码片段。

function findItems() {
  $$('ul.tabs > li').each(function(item, index) {
    if (item.previousSiblings().any(siblingHasClassTest)) {
      //alert(1);
      $('debug').innerHTML += 'element after test - index: ' + index + '<br />';
    }
  });
}

function siblingHasClassTest(sibling) {
  return sibling.hasClassName('test');
}
Event.observe(document, 'dom:loaded', findItems);
.test {
  border: 1px solid #00f;
}
<script data-require="prototype@*" data-semver="1.7.1+0" src="//cdnjs.cloudflare.com/ajax/libs/prototype/1.7.1.0/prototype.js"></script>
<ul class="tabs">
  <li>Test</li>
  <li>Test</li>
  <li>Test</li>
  <li class="test">Test</li>
  <li>Test</li>
</ul>
<div id="debug"></div>

也许你可以利用Function#curry()简化该siblingHasClasstest

关于javascript - 如何使用 PrototypeJS 检查一个元素是否在另一个元素之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123018/

相关文章:

javascript - 添加前将字符串转换为数字

javascript - 更改浏览器 URL 时是否有 Javascript keydown 限制?

css - 带边框的末子选择器仍然带有下划线

javascript - 如何改进Prototype.js回调函数代码

javascript - 如何使用原型(prototype)选择一个选项

jquery 和原型(prototype)冲突

javascript - React Router,我如何告诉路由器渲染到组件?

javascript - Phantomjs 迭代增量

jquery - 使用 jquery 将类添加到 nth-child

css - 自动组合/合并 CSS 选择器与预处理器