Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用jQuery分析HTML_Javascript_Jquery - Fatal编程技术网

Javascript 无法使用jQuery分析HTML

Javascript 无法使用jQuery分析HTML,javascript,jquery,Javascript,Jquery,我想使用jQuery解析主HTML,如下所示。当我使用文档时,它正在工作。但在使用字符串时不起作用 输出:null var str=“这是标题这是一个内容测试内容”; $str=$(文档);//工作 $str=$(str);//不起作用 警报($str.find(“.test”).html()); 另一种方法(也失败): 输出:null var str=“这是标题这是一个内容测试内容”; 警报($('.test',str.html()); 我得到的字符串也无法解析为XML,因为它不是有效的

我想使用jQuery解析主HTML,如下所示。当我使用文档时,它正在工作。但在使用字符串时不起作用

输出:null

var str=“这是标题这是一个内容

测试内容

”; $str=$(文档);//工作 $str=$(str);//不起作用 警报($str.find(“.test”).html());
另一种方法(也失败):

输出:null

var str=“这是标题这是一个内容

测试内容

”; 警报($('.test',str.html());

我得到的字符串也无法解析为XML,因为它不是有效的XHTML。

你太接近了!:)
$(文档)
行返回jQuery集;您不需要对其进行任何额外的转换

$str = $(document); // working
alert($str.find(".test").html());​

jQuery可以将HTML片段转换为DOM元素的树,但它只对内容元素执行此操作,而不是
HTML
title
head
,等等。只有放在
body
中的内容。所以这可能会引起一些麻烦

该函数查找与给定选择器匹配的子元素。因此,即使jQuery实例中的任何顶级元素与选择器匹配,它们也不会被
find
找到。例如:

$('<p class="foo">foo</p>').find('.foo').length; // 0 -- none found
另一种方法是在使用
find
之前,将所有元素放入一个容器中,如div:

var str = "<div><p>This is a content</p><p class='test'>Test content</p></div>";
$(str).find('.test').length; // 1 -- it was found
var str=“这是一个内容

测试内容

”; $(str).find('.test').length;//1--找到了
试试这个:

var str = "<html><title>This is Title</title><body><p>This is a content</p><p class='test'>Test content</p></body></html>";
console.log($($.parseXML(str)).find('.test'));
var str=“这是标题这是一个内容

测试内容

”; log($($.parseXML(str)).find('.test');
因此,首先将字符串解析为XML

UPD。正如T.J.Crowder在评论中指出的,您必须确保您的HMTL字符串是有效的XHTML

使用普通JS的强大功能可以:

var parser, xml,
    str = "<html><title>This is Title</title><body><p>This is a content</p><p class='test'>Test content</p></body></html>";

if (window.DOMParser) {
    parser = new DOMParser();
    xml = parser.parseFromString(str, "text/xml");
}
else { // IE
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = "false";
    xml.loadXML(str);
}

console.log( $(xml).find('.test') );
var解析器,xml,
str=“这是Title这是一个内容

测试内容

”; if(window.DOMParser){ parser=新的DOMParser(); xml=parser.parseFromString(str,“text/xml”); } 否则{//IE xml=新的ActiveXObject(“Microsoft.XMLDOM”); xml.async=“false”; loadXML(str); } log($(xml.find('.test'));
问题在于字符串包含完整的HTML文档

这将有助于:

var str = "<div><p>This is a content</p><p class='test'>Test content</p></div>";
alert($(str).find('.test').html());​​​
var str=“这是一个内容

测试内容

”; 警报($(str.find('.test').html());​​​
尝试以下代码:

$(str).find(".test").html();

直接使用str变量…不要在变量中赋值..

好的,因为它不是有效的XHTML,我无法解析为XML。但我还是得到了一个简单而愚蠢的解决方案来实现我想要的

var str = "<html><title>This is Title</title><body><p>This is a content</p><p class='test'>Test content</p></body></html>";

//-- replace with document or whatever which will not conflict ---------
str = str.replace(/html>/gi,'document>');

alert($(str).find('.test').html());
var str=“这是标题这是一个内容

测试内容

”; //--替换为文件或任何不会冲突的文件--------- str=str.replace(/html>/gi,'document>'); 警报($(str.find('.test').html());
输出:
测试内容。

也许这不是一个合适的方式。但它仍然非常有效


谢谢你@T.J.克劳德。我从jQuery只能解析HTML片段的概念中得到了这个想法。所以,我们可以通过伪装来实现这一点

检查这个,看看是否对你有帮助。我不认为这是他的意思。你不想尝试将HTML片段解析为XML。除非你知道它们是有效的XHTML。此外,这不是问题。@t.J.Crowder也许你是对的,但有时它会很有用。@dfsq很好,但实际上我得到的字符串来自另一个无效的XHTML网站。我只需要在div标记中查找内容,但无法将其解析为xml。就我所知,DOMParser甚至可以处理无效的HTML。谢谢您的快速回复reference@harsh4u有人可以解释这个逻辑。
var str = "<div><p>This is a content</p><p class='test'>Test content</p></div>";
alert($(str).find('.test').html());​​​
$(str).find(".test").html();
var str = "<html><title>This is Title</title><body><p>This is a content</p><p class='test'>Test content</p></body></html>";

//-- replace with document or whatever which will not conflict ---------
str = str.replace(/html>/gi,'document>');

alert($(str).find('.test').html());