我需要从任意网页中提取文本(只有纯文本)(我的服务器上使用简单的php代理绕过了跨域问题)。 我像往常一样,
$.get(url, function(data) {
process(data);
});
并且,在我的process()函数中,我有页面的内容。 我想在那个页面中考虑一个特定的div(这里是'#my-div'),或者,如果不存在的话 - 考虑一个后备 - 整个身体。
我想做这样的事情:
function process(content) {
if ($(content).find('#my-div'))
$('#output').text($(content).find('#my-div').text());
else
$('#output').text($(content).find('body').text());
}
但是我总是打赌在找到“身体”时得到一个空洞的结果:任何建议?
答案 0 :(得分:3)
使用
if ($(content).find('#my-div').length)
查看元素是否存在。
答案 1 :(得分:3)
有些问题......
function process(content) {
// The if() will always be true, because a jQuery object is always retruend
if ($(content).find('#my-div'))
$('#output') = $(content).find('#my-div').text(); // invalid assignment
else
$('#output') = $(content).find('body').text(); // invalid assignment
}
固定...
function process(content) {
var nodes = $(content); // cache the elements
if (nodes.find('#my-div').length)
$('#output').text(nodes.find('#my-div').text());
else
$('#output').text(nodes.find('body').text());
}
现在理论上它似乎有效,但将整个HTML文档传递给$
函数存在问题。您会发现某些浏览器会删除某些元素,例如<head>
和<body>
。
你最终需要测试每种情况,比如这样......
function process(content) {
var nodes = $(content); // cache the elements
var my_div = nodes.find('#my-div'); // try to get nested #my-div
if( !my_div.length ) {
my_div = nodes.filter('#my-div'); // try to get #my-div at top level
if( !my_div.length ) {
my_div = nodes.find('body') // try to get nested body
if( !my_div.length ) {
my_div = nodes; // assume the body content is at the top level
}
}
}
$('#output').text(my_div.text());
}
答案 2 :(得分:0)
您需要设置文本属性
$('#output').text($(content).find('#my-div').text());
else
$('#output').text($(content).find('body').text());