我正在尝试创建一个逻辑,如果有人在"<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>
。那么我该怎么做....
答案 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
}