Javascript 无法使用jQuery分析HTML
我想使用jQuery解析主HTML,如下所示。当我使用文档时,它正在工作。但在使用字符串时不起作用 输出:nullJavascript 无法使用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,因为它不是有效的
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());