【问题标题】:If <li> contains specific text, return false如果 <li> 包含特定文本,则返回 false
【发布时间】:2011-12-02 19:05:38
【问题描述】:

我有这个 HTML,如果元素包含特定文本,我会尝试在点击时返回 false。

这是我的 HTML:

<ul>
    <li id="1"></li>
    <li id="2"></li>
    <li id="3"></li>
    <li id="4"></li>
    <li id="5"></li>
    <li id="6">text</li>
    <li id="7"></li>
</ul>

Javascript:

$("ul").on('click', 'li', function (e) {
    var value = $(this).attr('id');
    if ("#" + value + ":contains(\"text\")"){  // Something similar to this
        return false;
    };
    alert('test');
});

如果元素包含单词“text”,我如何返回 false。

示例:http://jsfiddle.net/wSvLD/(这对所有内容都返回 false)

【问题讨论】:

  • 请永远不要使用 jQuery 的 attr 函数。这是意大利面条代码。请改用this.id

标签: javascript jquery contains


【解决方案1】:

您需要在 contains("text") 中转义这些引号

或者单引号和双引号结合使用....

另外,值 var 应该在事件函数内部。

编辑:

$("li").click(function (e) {

    var value = $(this).attr('id');

    if ( $('#' + value + ':contains("text")').length != 0 ){ 
        return false;
    }

    alert('test');

});

:contains 返回一个 jQuery 对象,所以需要检查对象的长度,看是否包含匹配项。

http://jsfiddle.net/8NuvP/

【讨论】:

  • 我的错,你的代码中的 if 语句有一个额外的括号 - 现在应该可以工作了......
  • 检查这个:jsfiddle.net/wSvLD 不管它不编译的文本。您的示例是针对特定文本的吗?因为这是我要找的。​​span>
  • 它会在每次点击时发出警报,并且使用 > 0 对我来说不是一个解决方案。我说的是特定值,在我的情况下是“文本”。不是字符
  • 在我的回答中查看上面的编辑...我是 jsfiddle 的新手,所以它给我带来了问题...我的回答中的代码可以按照您的意愿工作。
  • :contains 返回一个 jquery 对象,其中所有元素都与包含的文本匹配 - 因此,如果元素确实包含文本,则该对象的长度为 1。jsfiddle.net/8NuvP
【解决方案2】:

你已经很接近了!

$("ul").on('click', 'li', function (e) {
    if($(this).text() == "text"){
        return false;
    };
    alert('test')
});

【讨论】:

  • 只有当文本等于 text 时才会返回 false。例如,text too 将不匹配。
  • 但是,根据给定的示例,它会起作用 :) 但是你是对的,如果 OP 想要拥有更多的文本而不仅仅是“文本”。
  • @jQuerybeast:jValdron 的回答正是如此。为什么说它不起作用? $(this).text() == "text" 将匹配 确切的单词,然后返回 false。如果文本不完全匹配,您将获得alert("test")Here's an example。单击"text" 会返回false,而单击其他会显示警报。
  • 如果您想测试内容中任何位置的单词,请将其更改为 if($(this).text().indexOf("text") !== -1) {
  • 谢谢两位。这就是我要找的:jsfiddle.net/8NuvP。这是一个非常长的 JS,归结为我无法使用变量值,我试图用 '#' + 值替换你的示例'this',但没有奏效。不过谢谢
【解决方案3】:

试试这个:

$('li:not(:contains(text))').click(function() {
    alert('test');
});

【讨论】:

  • 文本不需要引号吗?
  • 你好安德鲁。我想让你使用 if 语句,因为它来自一个长链,我想使用“#”+ value +。谢谢
【解决方案4】:
$("li").click(function(){
  $(this).text() == "text" ? return false: return "something else";
});

但是如果你想要做的是对所有的“文本”都使用点击功能,你应该这样做:

$('li:not(:contains("text"))').click(function(){ 
      //whatever you are trying to achieve
});

【讨论】:

  • 你好 Dbugger。我想让你使用 if 语句,因为它来自一个长链,我想使用“#”+ value +。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 2013-01-06
  • 2018-05-05
  • 2017-11-29
  • 1970-01-01
  • 2016-12-06
  • 2015-06-03
  • 1970-01-01
相关资源
最近更新 更多