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
"&nbsp;" // false
“你好”//true
“hellothere”//false
“有”//false
“”//错误

不是实际答案,但可能会帮助与我的问题类似且与此问题关系松散的人。:)

今天我遇到了同样的问题,所以通过删除

更改:

var breaks=$j(“”)

致:

var breaks=$j(“.replace(/&.*;/g)”)

这里我正在删除


注意:
上的值对我来说是动态的,所以它可以是任何东西。

你到底为什么要这样做?很确定即使是一个普通的
$(“”)
也会导致同样的结果,不要将一个不间断的空格实体传递给jquery。你为什么要这样做
$j(“”)?您希望它做什么?在gereal中,您不能使用jQuery函数创建独立的文本节点。我的猜测是,如果字符串不是明显的HTML,它会被视为选择器,
不会被识别为有效的选择器。您将HTML或文本字符串放入
div
中进行解析,然后立即提取生成的元素。我希望能给您更多投票。1的正确性。1作为代码示例。1表示引用。实际上,“”不返回true。。。它不是一个文本节点吗?