Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 如果找到,如何追加;如果根本找不到,如何替换?(xml find.each循环)_Javascript_Jquery - Fatal编程技术网

Javascript 如果找到,如何追加;如果根本找不到,如何替换?(xml find.each循环)

Javascript 如果找到,如何追加;如果根本找不到,如何替换?(xml find.each循环),javascript,jquery,Javascript,Jquery,我试图在xml文件中搜索字符串值,如果找到字符串值,则将其追加到div。如果根本找不到,那么我需要在未找到搜索词的同一个div中显示错误文本 这基本上应该是一个搜索页面,将搜索的项目加载到div内容中 目前我的内容加载良好。如果找到搜索词,则加载xml中所有相应的div,但是如果找不到搜索词,则无法显示错误 我的XML: '; 找到\u string=true;///在数组中保留value=TRUE或FALSE…全局数组,然后在该数组中搜索TRUE。如果全部为FALSE,则显示错误。 } 如果

我试图在xml文件中搜索字符串值,如果找到字符串值,则将其追加到div。如果根本找不到,那么我需要在未找到搜索词的同一个div中显示错误文本

这基本上应该是一个搜索页面,将搜索的项目加载到div内容中

目前我的内容加载良好。如果找到搜索词,则加载xml中所有相应的div,但是如果找不到搜索词,则无法显示错误

我的XML:

';
找到\u string=true;///在数组中保留value=TRUE或FALSE…全局数组,然后在该数组中搜索TRUE。如果全部为FALSE,则显示错误。
}
如果(找到字符串){
$('.list-h').append(结果字符串);
$('').text(“已找到”);
}
}); //每个函数结束。
},错误:function(){console.log('错误:无法加载动物信息xml');}
});
//未找到搜索脚本的开始
$(窗口)。加载(函数(){
var error_found=$('#error_div').text();console.log(error_found);
setTimeout(函数(){
如果(发现错误!=“发现”){
var results_string='Your Search Query'+$.url().param('q')。找不到replace(“%20”,“)+”!可能您输入了无效的搜索查询。“;
$('.list-h').append(results_string);}
}, 0);
});
//未找到搜索脚本的结尾
下面是js对完整XML url的处理:


有人能帮我解决这个问题吗?谢谢

我有点不确定所有东西是如何组合在一起的,因为javascript代码不是自解释的。但是,你能从这里开始解决这个问题吗

    if(s_string)
    var s_string2 = s_string.replace("%20"," ");
    //console.log(p_xml_string + s_string2);

    if(p_xml_string.toLowerCase().indexOf(s_string2) > -1){
s_string2
变量在此表达式中使用时超出范围

if(p_xml_string.toLowerCase().indexOf(s_string2) > -1){
你在那里想干什么?上面的表达式将始终计算为false,因为
s_string2
未定义。换句话说,无论您在
if
块中执行什么处理,都永远不会到达该块

同样,这个变量在同一时间被实例化和处理

 if(s_string)
     var s_string2 = s_string.replace("%20"," "); //<--- This variable's lifecycle ends here

一些改变可能会解决你的问题

html

<div id="error_div"></div>

更改
找到\u字符串
类似代码

if (found_string) {
   $('.list-h').append(results_string);
   $('#error_div').text("found");
}
可选地为
error\u div

#error_div {
    color:red;
}

更新
成功
代码

    var found_string = false; // define found_string globally
    $(xmlResponse).find("item").each(function () {
        var pr_id = $(this).find("animal_id").text();
        var p_title = $(this).find("animal_title").text();
        var p_category = $(this).find("animal_category").text();
        var p_code = $(this).find("animal_code").text();
        var p_img = $(this).find("animal_img").text();
        var p_url = $(this).find("animal_url").text();
        var p_gen_name = $(this).find("animal_generic").text();

        var p_xml_string = p_title + p_gen_name,
            results_string = '',
            error;
        var s_string2 = '';

        if (s_string) s_string2 = s_string.replace("%20", " ");
        if (s_string2 && p_xml_string.toLowerCase().indexOf(s_string2) > -1) {
            //console.log("FOUND : " + p_title);
            results_string = '<div class="item"><div class="item-h"><a class="item-anchor" href="' + p_url + '"><div class="item-image"><img class="item-image-first" src="' + p_img + '" alt=""><div class="item-meta"><h2 class="item-title">' + p_title + '</h2><span class="item-arrow"></span></div></div></a></div></div>';
            found_string = true; //// KEEP VALUES = TRUE OR FALSE IN AN ARRAY...GLOBAL ARRAY, AND THEN SEARCH THAT ARRAY FOR TRUE. IF ALL FALSE, SHOW ERROR.
        }
        if (found_string) { // if found then append in list
            $('.list-h').append(results_string);
        }

    }); //xmlResponse .each function end.
    if (found_string) { // if found then empty error div
        $('#error_div').text("");
    } else { // else show error text or not found
        $('#error_div').text("not found");
    }
var found\u string=false;//全局定义找到的字符串
$(xmlResponse).find(“项”).each(函数(){
var pr_id=$(this).find(“animal_id”).text();
var p_title=$(this).find(“animal_title”).text();
var p_category=$(this).find(“animal_category”).text();
var p_code=$(this).find(“animal_code”).text();
var p_img=$(this).find(“animal_img”).text();
var p_url=$(this).find(“animal_url”).text();
var p_gen_name=$(this).find(“animal_generic”).text();
var p_xml_string=p_title+p_gen_name,
结果_字符串=“”,
错误;
var s_string2='';
如果(s_字符串)s_字符串2=s_字符串。替换(“%20”,”);
if(s_string2&&p_xml_string.toLowerCase().indexOf(s_string2)>-1){
//console.log(“找到:+p_title”);
结果_字符串=“”;
在数组中找到\u string=true;///保留值=true或FALSE…全局数组,然后在该数组中搜索true。如果全部为FALSE,则显示错误。
}
if(find_string){//if find然后追加到列表中
$('.list-h').append(结果字符串);
}
}); //每个函数结束。
if(found_string){//如果找到,则为空错误div
$('#error_div')。文本(“”);
}else{//else显示错误文本或未找到
$('#error_div')。文本(“未找到”);
}

更新了

好吧,我正在尝试使用参数“search.html?q=birds”(birds是搜索字符串)将其他页面的搜索字符串发送到此search.html页面,因此如果有空格,就像
食肉动物
在url中,它将是
q=carnivoous%20animals
,所以我只是尝试删除
%20
,并用
空格替换它。为什么
s_string2
超出范围?如果您检查JSFIDLE,div加载正确
if(s_string)
仅检查是否已传递任何查询,例如:“search.html?q=”对于该if条件将为false。
s_string2
超出范围,因为它是在不同的上下文中声明的……如果您没有注意到,此表达式
if(p_xml_string.toLowerCase().indexOf(s_string2)>-1)
将始终计算为false,因为
s\u string2
未定义…谢谢你,利奥!我只想在没有找到字符串时显示一个错误,我通过Rohan的答案找到了解决方案!再次感谢!如果找到字符串,如何删除错误div?当前在JSFIDLE中,即使找到了字符串,“found”仍然显示!查看更新的演示,谢谢!!这显示了错误&找到的div完全正确!!:DHey,对于任何查看此答案的人,只需更改
s_字符串。替换(“%20”,”)
to
s_string.toLowerCase()。替换(“%20”,”)
对于带有capslock的搜索字符串,例如带有大写字母S的“Sparrow”,需要在javascript中将其更改为小S,否则将无法找到。
<div id="error_div"></div>
if (s_string) var s_string2 = s_string.replace("%20", " ");
//console.log(p_xml_string + s_string2);
if (p_xml_string.toLowerCase().indexOf(s_string2) > -1) {
var s_string2='';
if (s_string) s_string2 = s_string.replace("%20", " ");
if (s_string2 && p_xml_string.toLowerCase().indexOf(s_string2) > -1) {
if (found_string) {
   $('.list-h').append(results_string);
   $('#error_div').text("found");
}
#error_div {
    color:red;
}
    var found_string = false; // define found_string globally
    $(xmlResponse).find("item").each(function () {
        var pr_id = $(this).find("animal_id").text();
        var p_title = $(this).find("animal_title").text();
        var p_category = $(this).find("animal_category").text();
        var p_code = $(this).find("animal_code").text();
        var p_img = $(this).find("animal_img").text();
        var p_url = $(this).find("animal_url").text();
        var p_gen_name = $(this).find("animal_generic").text();

        var p_xml_string = p_title + p_gen_name,
            results_string = '',
            error;
        var s_string2 = '';

        if (s_string) s_string2 = s_string.replace("%20", " ");
        if (s_string2 && p_xml_string.toLowerCase().indexOf(s_string2) > -1) {
            //console.log("FOUND : " + p_title);
            results_string = '<div class="item"><div class="item-h"><a class="item-anchor" href="' + p_url + '"><div class="item-image"><img class="item-image-first" src="' + p_img + '" alt=""><div class="item-meta"><h2 class="item-title">' + p_title + '</h2><span class="item-arrow"></span></div></div></a></div></div>';
            found_string = true; //// KEEP VALUES = TRUE OR FALSE IN AN ARRAY...GLOBAL ARRAY, AND THEN SEARCH THAT ARRAY FOR TRUE. IF ALL FALSE, SHOW ERROR.
        }
        if (found_string) { // if found then append in list
            $('.list-h').append(results_string);
        }

    }); //xmlResponse .each function end.
    if (found_string) { // if found then empty error div
        $('#error_div').text("");
    } else { // else show error text or not found
        $('#error_div').text("not found");
    }