if语句在Javascript中无法正常工作

时间:2014-09-10 16:13:09

标签: javascript jquery html

我正在尝试创建一个逻辑,如果有人在"<p>" and "</p>"内输入<textarea>个字符,那么只有Jquery应该显示获胜消息。我有textarea个类html },h2,其中result类显示赢或输。现在,我有这段代码:

var html = $('.html').val();
if(html.indexOf("</p>" && "<p>") === -1)
{
document.getElementById("result").innerHTML = "You lost it.";
}
else{
document.getElementById("result").innerHTML = "Hurray!You won";
}

但是,此代码仅检查<p>是否存在且未检查</p>。那么我该怎么做....

3 个答案:

答案 0 :(得分:5)

表达式"</p>" && "<p>"相当于"<p>" - &&从左到右计算每个参数,并返回最后一个truthy参数。由于两个字符串都是真实的,所以你写的是有效的:

if (html.indexOf("<p>") === -1)

如果要测试字符串是否包含两个子字符串,则必须分别为每个字符串调用indexOf

if (html.index("</p>") !== -1 && html.indexOf("<p>") !== -1)

答案 1 :(得分:2)

来自MDN (Logical Operators) - Logical And (&&)

  

如果可以转换为false,则返回expr1;否则,返回   表达式2。因此,当与布尔值一起使用时,&amp;&amp;如果两者都返回true   操作数是真的;否则,返回false。

</p>未被评估为false,因此返回的第二个值为<p>

这意味着您只需检查<p>的索引。试试这个:

var html = $('.html').val();
if (html.indexOf("</p>") === -1 && html.indexOf("<p>") === -1) {
    document.getElementById("result").innerHTML = "You lost it.";
}
else {
    document.getElementById("result").innerHTML = "Hurray! You won";
}

答案 2 :(得分:1)

.indexOf将一个字符串作为参数。您不能使用&&将字符串元素组合在一起。

最简单修改代码的方法是进行两次单独的检查,一次用于开始标记,另一种用于关闭:

if (html.indexOf("</p>") !== -1 && html.indexOf("<p>") !== -1)

这会对两个字符串进行两次单独的检查。

或者,您可以从<textarea>内的HTML片段创建一个jQuery对象,然后检查它是否没有<p>个标记的子代:

if ($('<div>'+html+'</div>').find('p').length > 0) {
    // the textarea contains some <p> tags
}