Javascript jQuery,如何测试一个变量是否是一个文本节点,不包含任何标记?
我有两行代码,它们基本上做相同的事情Javascript jQuery,如何测试一个变量是否是一个文本节点,不包含任何标记?,javascript,jquery,Javascript,Jquery,我有两行代码,它们基本上做相同的事情 var doesntbreak = $j("hello"); var breaks = $j(" "); 第一个不会出错,但是第二个会抛出这个 Syntax error, unrecognized expression: 他们不应该表现得一样吗? 关于如何解决这个问题,有什么见解吗? 在我使用的实际方法中,ele来自Dom,因此它可以是文本节点或任何其他类型的节点 更新: 我正在使用的函数的输入,我注意到这
var doesntbreak = $j("hello");
var breaks = $j(" ");
第一个不会出错,但是第二个会抛出这个
Syntax error, unrecognized expression:
他们不应该表现得一样吗?
关于如何解决这个问题,有什么见解吗?
在我使用的实际方法中,ele
来自Dom,因此它可以是文本节点或任何其他类型的节点
更新:
我正在使用的函数的输入,我注意到这需要从dom中进行选择。
更新示例:Internet Explorer(至少旧版本)没有内置的“querySelector”功能,因此Sizzle引擎必须直接完成这项工作。因此,伪输入的公差稍有不同可能导致错误报告的差异
但是,您的选择器表达式“
在所有浏览器中都同样无效。库没有义务悄悄地接受您传递给它的任何内容,因此也许您应该重新考虑您的应用程序设计
如果要检查实体,如果确信正则表达式只是一个文本节点,则可以使用正则表达式。或者您可以使用
.text()
而不是.html()
获取内容。通常,您不能使用jQuery函数创建独立的文本节点。如果字符串不是明显的HTML,它将被视为选择器,jQuery不会将
识别为有效的选择器
假设您想要解析任意字符串(可能有HTML标记,也可能没有),我建议使用类似var result=$('').HTML('').contents()的方法代码>。将HTML或文本字符串放在div中进行解析,然后立即将解析后的结果提取为带有元素列表的jQuery对象。您可以使用$(parentElem)追加元素的结果列表代码>尝试以下操作:
function isTextNode(node){
div=document.createElement('div');
div.innerHTML=node;
return $(div).text()==$(div).html();
}
而“
不是一个有效的选择器如果你想找到一个包含一些文本的元素,你必须使用:contains选择器,因此,我必须感谢并为我指明了正确的方向。他们的回答非常接近,但给了我所需要的信息
这就是我最终使用的:
TEXT_NODE = 3;
objectify = function(n) {
return $j("<div></div>").html(n).contents();
}
function textOnly(n) {
var o = objectify(n);
for (var i = 0; i < o.length; i++) {
if (objectify(o[i])[0].nodeType != TEXT_NODE) {
return false
}
}
return true;
}
TEXT\u节点=3;
objectify=函数(n){
返回$j(“”).html(n.contents();
}
函数textOnly(n){
var o=客观化(n);
对于(变量i=0;i
这里有一个测试用例,这两个原始代码提交都没有通过
要通过,它需要处理这种输入
"hello" // true
"hello<b>there</b>" // false
"<b>there</b>" // false
" " // false
“你好”//true
“hellothere”//false
“有”//false
“”//错误
不是实际答案,但可能会帮助与我的问题类似且与此问题关系松散的人。:)
今天我遇到了同样的问题,所以通过删除
更改:
var breaks=$j(“”)代码>
致:
var breaks=$j(“.replace(/&.*;/g)”)代码>
这里我正在删除
,
等
注意:在
上的值对我来说是动态的,所以它可以是任何东西。你到底为什么要这样做?很确定即使是一个普通的$(“”)
也会导致同样的结果,不要将一个不间断的空格实体传递给jquery。你为什么要这样做$j(“”)代码>?您希望它做什么?在gereal中,您不能使用jQuery函数创建独立的文本节点。我的猜测是,如果字符串不是明显的HTML,它会被视为选择器,
不会被识别为有效的选择器代码>。您将HTML或文本字符串放入div
中进行解析,然后立即提取生成的元素。我希望能给您更多投票。1的正确性。1作为代码示例。1表示引用。实际上,“”不返回true。。。它不是一个文本节点吗?