【问题标题】:Convert Jquery to javascript (find()) [duplicate]将Jquery转换为javascript(find())[重复]
【发布时间】:2017-08-11 23:03:47
【问题描述】:

我正在开发一个老式的应用程序。它太旧了,不支持jquery。在大多数情况下这很好,但我遇到了一个让我很烦的地方。

我需要选择一个包含“Novedades”一词的链接,这样我就可以更改 http 属性。希望我能以不同的方式做到这一点,但他们有一个 CMS 正在改变我每一次转向的一切。 :) 你能说我喜欢这个系统吗?

通常,这就是我在 Jquery 中编写它的方式。很简单,但我怎样才能把 find 变成普通的 javascript?

var blog = $('.navbar-nav').find('a:contains(Novedades)');

所以很明显这将从

开始
var blog = document.getElementsByClassName("navbar-nav")

任何帮助将不胜感激! :)

【问题讨论】:

  • 基于文本内容的选择并不如意。但是,如果没有其他方法,我只需使用 document.querySelectorAll() 和单个选择器来获取 '.navbar-nav a' 元素,然后通过测试每个元素的 .textContent 来过滤它们。
  • @squint 是的,我也不喜欢选择文本,但这是一个糟糕的系统。不太确定我知道你要去哪里。像 document.querySelectorAll('navbar-nav a').textContent('Novedades') 之类的东西?
  • 差不多。 querySelectorAll 方法返回一个集合。听起来您只需要执行一个操作,因此最简单、最广泛兼容的方法是使用 for 循环来迭代集合,检查每个单独元素的 .textContent 属性,然后更改 @ 987654329@ 在循环中。
  • @zazvorniki 您应该手动创建一个函数,该函数循环遍历 <a> 标签并检查其内容。就像我之前发布的链接一样。这是一种方法
  • 如果您只支持现代浏览器,或者可以转译代码,则可以使用更好的语法。

标签: javascript jquery


【解决方案1】:

根据 squint 的评论,您必须了解老派并遍历它们:

var blog = document.querySelectorAll(".navbar-nav a");
for (var i=0;i<blog.length;i++){
   var thisBlog = blog[i];
   var txt = thisBlog.textContent.toLowerCase();
   if (txt.indexOf('novedades') > -1){
      //do your thing
   }
}

【讨论】:

  • 对我来说看起来不错,但如果没有这些一次性变量,它可能会不那么冗长。在模拟:contains() 时,它应该保持区分大小写。 if (blog[i].textContent.indexOf('Novedades') &gt; -1){
  • 明白了,为了清楚起见,故意冗长。
  • 非常感谢!你让我免于用头撞桌子!
猜你喜欢
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2021-08-22
  • 2015-11-19
  • 2019-04-30
  • 2021-12-18
相关资源
最近更新 更多