【问题标题】:JQuery is() returning truejQuery is() 返回真
【发布时间】:2019-10-30 15:57:12
【问题描述】:

我有这个字符串可以代表两件事,要么是一些文本,要么是带有文本的锚标记。我写了一些东西来总是返回如下文本:

$(text).is('a') ? $(text).text() : text;

我的逻辑是,如果文本是锚标记?返回锚标签的内容:如果不是,那么它已经只是文本,所以返回它。

我的问题是为什么下面的表达式返回 true:

$('a').is('a');

是检查字母还是锚元素?如何检查我的文本是否是锚标记。

我宁愿不使用任何正则表达式

编辑:

我有一个变量 x 可以有这些值:

x = 'some text' or x = '<a>some text</a>'

如何始终从变量 x 中提取文本。

【问题讨论】:

  • 它正在选择页面上的锚点,它说我的 jQuery 集合中的第一个元素是一个锚点。
  • 我想你有一个X/Y problem heretext 中可能的值是什么,你真正想要做什么?
  • jQuery 似乎是一个奇怪的工具来解决这个问题。
  • "or an anchor tag" - 如&lt;a href=&gt;或来自DOM?如果它是 HTML,那么它也只是文本。当变量是“带有文本的锚标记”时,究竟是什么?
  • 哪一个?有你如何提取所述数据的示例吗?

标签: javascript jquery


【解决方案1】:

'a' 是一个有效的查询选择器。它将选择文档中的所有锚元素。所以$('a').is('a') 是在说“在文档中找到锚标签并告诉我它们是否是锚标签”——除非你的文档中没有锚标签,否则这将永远是正确的。

【讨论】:

  • 是的,刚刚解决了这个问题 :) 我的大脑最近比 jQuery 更习惯 querySelector :)
  • 有道理,我在这里对我的问题 X/Y 问题进行了编辑。
【解决方案2】:

我有这个字符串可以代表两件事,要么是一些文本,要么是带有文本的锚标记。我写了一些东西来总是返回如下文本:

$(text).is('a') ? $(text).text() : text;

我的逻辑是,如果文本是锚标记?返回锚标签的内容:如果不是,那么它已经只是文本,所以返回它。

如果可能的话,我会避免让text 像那样含糊不清。

您当然不能只是将文本转储到$() 并假设一切都会好起来。例如,$("Some text here") 在 DOM 中搜索标签为 here 的元素在标签为 text 的元素中在标签为 Some 的元素中。

你说过要区分

text = "Some text here"

text = "<a>Some text here</a>"

我只想看看字符串。部分灵感来自 jQuery 检查您传递的内容是选择器还是 HTML (here),怎么样:

text = text.trim();
if (text.substring(0, 2) === "<a" && text.substr(-1) === ">") {
    text = $(text).text();
}

或类似的?

但是,如果你有任何选择,我会避免把自己放在首位。

【讨论】:

    【解决方案3】:

    只需将您拥有的字符串设置为元素的 html。抓取元素的文本,这样您就不用担心它是锚点还是纯文本。

    function getText (content) {
      var div = document.createElement("div")
      div.innerHTML = content
      return div.textContent
    }
    
    console.log('some text', getText('some text'))
    console.log('<a>some text</a>', getText('<a>some text</a>'))

    如果你想使用 jQuery

    function getText (content) {
      return $("<div></div>", {html: content}).text()
    }
    
    console.log('some text', getText('some text'))
    console.log('<a>some text</a>', getText('<a>some text</a>'))
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • @DaveGray 它只是将内容包装在一个新的 div 元素中,这样无论它是文本字符串还是锚标记,它最终都会成为一个元素。然后你可以在它上面使用.text(),不管它的原始形式是什么,因为它永远是一个元素。
    【解决方案4】:

    我无法重现您解释的问题。请看:https://api.jquery.com/is/

    这是我的测试:

    $(function() {
      var tableData = [
        "Text 1",
        "Text 2",
        "<a>Text 3</a>",
        "Text 4"
      ];
    
      function isLink(el) {
        return $(el).is("a");
      }
    
      var x = [];
      $.each(tableData, function(i, s) {
        x.push(isLink(s) ? $(s).text().trim() : s);
      });
      $(".results").html(x.join(", "));
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="results"></div>

    您可以将文本、元素甚至 jQuery 对象传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2019-06-02
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多