2010-10-08 5 views
1

J'ai le script suivant que j'ai besoin de combiner d'une manière ou d'une autre. Chaque fonction fonctionne individuellement pour le moment.Modifier les résultats renvoyés avant de les ajouter à l'écran

// Check if file exists clientside 
function FileExists(path) { 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 

    FileExist = fso.FileExists(path); 

    if (FileExist == true){ 
     return true 
    } else { 
     return false 
    } 
} 

// Get links from database 
function getSearchResults() { 
    var search; 
    search = $(".txtHeaderSearch").val(); 

    $.ajax({ 
     url: 'results.aspx', 
     type: 'POST', 
     data: { strPhrase:search }, 
     success: function(results) { 
      // Need to somehow stop the .exe links from appearing on screen if FileExists == false 
      $("#divSearchResults").empty().append(results); 
     } 
    }); 
} 

// The returned data looks something like this 
<div><a href="link1.xls">link 1</a></div> 
<div><a href="link2.exe">link 2</a></div> 
<div><a href="link3.doc">link 3</a></div> 
<div><a href="link4.aspx">link 4</a></div> 

Est-il possible d'intégrer en quelque sorte la fonction FileExists avec la fonction ajax succès pour éviter les liens .exe d'apparaître sur les clients écran si le fichier exe en question n'existe pas sur l'ordinateur des clients?

EDIT 1: Ce qui suit est de me donner un objet ne supporte pas cette propriété ou erreur méthode:

success: function(results) 
    { 
     results.find('a[href$=".exe"]').each(function(){ 
      if (FileExists(this.href)) { 
       $(this).parent().remove(); 
      } 
     }); 

     $("#divSearchResults").empty().append(results); 
    } 

EDIT 2: Ne plus donner l'erreur, mais ne supprime pas les fichiers exe non Existant soit.

success: function(results) 
    { 
     $(results).find('a[href$=".exe"]').each(function(){ 
      if (FileExists(this.href)) { 
       $(this).parent().remove(); 
      } 
     }); 

     $("#divSearchResults").empty().append(results); 
    } 

EDIT 3: Cela ne fonctionne pas non plus.

success: function(results) 
    { 
     var $results = $(results); 

     $results.find('a[href$=".exe"]').each(function(){ 
      if (! FileExists(this.href)) { 
       $(this).parent().remove(); 
      } 
     }); 

     $("#divSearchResults").empty().append($results); 
    } 

Répondre

0

La réponse consistait à inclure un intervalle dans chaque ligne. Pour une raison qui fonctionne ...

0

vous pouvez faire cela, attribute ends with selector

$(results).find('a[href$=".exe"]').parent().remove(); 

basé sur mon expérience, parfois cette ligne ne fonctionnerait pas. Si cela se produit trop pour vous, faites cela,

var results = $('<div>').html(results).find('a[href$=".exe"]').parent().remove(); 
results = results.html(); 

alors votre résultat sera désormais en ligne quelque chose ce,

<div><a href="link1.xls">link 1</a></div> 
<div><a href="link3.doc">link 3</a></div> 
<div><a href="link4.aspx">link 4</a></div> 

mis à jour pour le commentaire ci-dessous.

$(results).find('a[href$=".exe"]').each(function(){ 
    if (! FileExists(this.href)) { // uses href as the path... 
     $(this).parent().remove(); 
    } 
}); 
+0

Je ne veux pas supprimer tous les fichiers .exe des résultats, uniquement les fichiers .exe qui n'existent pas sur l'ordinateur client. D'où la fonction FileExists. – oshirowanen

+0

a modifié ma réponse ...;) – Reigel

+0

Est-ce que ce script mis à jour va dans la section de succès de la fonction jquery ajax? – oshirowanen

Questions connexes