如果.html()具有特定值

时间:2014-04-10 20:34:07

标签: javascript jquery html

这可能是一个非常基本的问题,但我想知道如何找出.html()是否具有特定值(在本例中为字符串)。一个例子:

<p id="text">Hello this is a long text with numbers like 01234567</p>

我想问一下

var $text = $('#text');
if ($text.html() == '01234567')

当然这不起作用。但是,我如何才能将另一种方法提升为.html()提出

if($text.html().contains() == '01234567');

重要的是,在我的情况下,我肯定会搜索与空格隔离的内容,而不是像withnumberslike01234567那样,但实际上如果这样做也会很有趣。

提前致谢!

5 个答案:

答案 0 :(得分:3)

(' ' + document.getElementById('text').textContent + ' ').indexOf(' 01234567 ') != -1

修复了文本开头的问题,不会滥用正则表达式,并且对于vanilla.js来说是万岁!

答案 1 :(得分:2)

您可以使用indexOf

var text = $('#text').html();

if(text.indexOf(" 01234567") != -1) {
    // your logic
}

您的HTML可能会以01234567开头;在这种情况下,你可以这样做:

if((' ' + text).indexOf(" 01234567") != -1) {
    // your logic
}

谢谢,bjb568和Felix Kling。

答案 2 :(得分:1)

据我从OP了解,这些是测试案例:

hello12348hello     // false
hello 1234hello     // false
hello012348 hello   // false
hello 1234 hello    // TRUE
1234hello           // false
hello1234           // false
1234 hello          // TRUE
hello 1234          // TRUE
                    // false
1234                // TRUE
 1234               // TRUE

**将“”更改为任何其他空白字符(例如\t\n,...)应该会得到相同的结果。

正如OP所说:

  

以空格分隔的内容,而不是像withnumberslike01234567

所以,hello 01234567withnumberslike也错了!!!

创建功能:

function contains(value, searchString){
    // option 1: splitting and finding a word separated by white spaces
    var words = value.split(/\s+/g);
    for (var i = 0; i < words.length; i++){
        if (words[i] === searchString){
            return true;
        }
    }
    return false;

    // option 1a: for IE9+
    return value.split(/\s+/g).indexOf(searchString) > -1;

    // option 2: using RegEx
    return (new RegExp("\\b" + searchString + "\\b")).test(value);
    return (new RegExp("(^|\\s)" + searchString + "($|\\s)")).test(value);  // this also works

    // option 3: Hardcoded RegEx
    return /\b1234\b/.test(value);
}

See case tests here in jsFiddle

它还会接受标签和空格..


注意我不担心使用RegEx,它不像indexOf那么快,但它仍然非常快。这不应该是一个问题,除非你迭代数百万次次。如果是这种情况,也许你需要重新考虑你的方法,因为可能出现了问题......

我会说你考虑兼容性,有很多用户仍在使用IE8,IE7,甚至IE6(现在差不多10% - 2014年4月)。 - 不再是2016年发行..

此外,最好保持代码标准。

因为您正在使用jQuery,所以您也可以使用.text()来查找字符串:

var element = $(this);
var elementText = element.text();

if (contains(elementText, "1234"){
    element.text(elementText.replace("1234", "$ 1234.00"))
           .addClass("matchedString");
    $('#otherElement').text("matched: 1234");
}

感谢@ Karl-AndréGagnon的提示。

\b:任何边界词(或字符串的开头/结尾)
^:字符串的开头
\s:任何空白字符
$:字符串的结尾为

http://rubular.com/r/Ul6Ci4pcCf

答案 3 :(得分:0)

您可以在JavaScript中使用String.indexOf方法来确定一个字符串是否包含在另一个字符串中。如果传入indexOf的字符串不在字符串中,则返回-1。这是你应该利用的行为。

If ($test.html().indexOf("1234567890") != -1)
    //Do Something

答案 4 :(得分:-1)