2016-06-08 5 views
0

Ich verwende derzeit den folgenden Code, um Werte aus einer Datenbank zu erhalten und dann die Werte zu einem Formular, das ich habe. Der erste Teil hängt den Namen der Firewall an und fügt auch die eindeutige ID der ID für das Element hinzu.jQuery - Holen Sie sich die ID eines Elements und wenn es gleich Wert ist dann fügen Sie den Link

if (value.type == 'Firewall') { 
    $('#companyFirewall').append('<div class="detailsFirewall" id="Firewall' + value.id + '">' + value.value + '</div>'); 
} 

Der nächste Abschnitt des Codes wird die „thing_id“ aus der Datenbank erhalten, die ein Fremdschlüssel sein wird, die auf die „Firewall“ eindeutige ID betrifft, und wenn es stimmt mit dem „id“ des Element wird es den Text mit dem Link umschließen, der in der Datenbank ist.

if (value.type == 'Firewall URL') { 
    if ($('.detailsFirewall').attr('id') == 'Firewall' + value.thing_id) { 
    $('#Firewall' + value.thing_id).wrap('<a target="_blank" href="' + value.value + '" />'); 
    } 
} 

Nun das Problem Ich habe es nur ist die erste Textumbruch und nicht den Rest von ihnen nicht tun. Im Moment ist alles in einer Funktion, aber ich habe versucht, es in Funktion zu bringen und es dann aufzurufen, sobald die andere Funktion beendet ist. Ich habe auch versucht, die Funktion um ein paar Sekunden zu verzögern, das hat auch nicht funktioniert. Was kann ich tun, um das zu beheben?

Hier ist der gesamte Code-Block:

$.get(submitLink, { business_id: business_id, sitePath: sitePath, companyFirewall: companyFirewall }) 
    .done(function(data) { 
    var results = jQuery.parseJSON(data); 
    console.log(data); 
    $(results).each(function(key, value) { 

     /* Add the data */ 
     if (value.type == 'Firewall') { 
      $('#companyFirewall').append('<div class="detailsFirewall" id="Firewall' + value.id + '">' + value.value + '</div>'); 
     } 
     if (value.type == 'Firewall URL') { 
      if ($('.detailsFirewall').attr('id') == 'Firewall' + value.thing_id) { 
       $('#Firewall' + value.thing_id).wrap('<a target="_blank" href="' + value.value + '" />'); 
      } 
     } 

     /* Logs the data in the console */ 
     console.log(key); 
     console.log(value); 
    }) 
}); 
+0

Was bedeutet 'data' aussehen? – Tex

+0

Ich denke, Ihre Verwendung von jQuery ist ein bisschen übertrieben und kann Sie davon abhalten, die Lösung zu finden. Überlegen Sie, den Code in 'if (value.type == 'Firewall-URL')' zu ändern in: 'var el = document.getElementById ('Firewall' + value.thing_id); if (el) { $ (el) .wrap ... } ' – evilham

+0

' Daten' sieht so aus: '{" type ":" Firewall "," value ":" Name "," sache_id ": null, "id": "1"} ' – Mason

Antwort

0

Dank seiner Lösung mein Problem behoben evilham.

I geändert:

if (value.type == 'Firewall URL') { 
    if ($('.detailsFirewall').attr('id') == 'Firewall' + value.thing_id) { 
     $('#Firewall' + value.thing_id).wrap('<a target="_blank" href="' + value.value + '" />'); 
    } 
} 

Um dies:

var el = document.getElementById('Firewall' + value.thing_id); 
    if (el) { 
     $(el).wrap('<a target="_blank" href="' + value.value + '" />'); 
    } 
0

Dies geschieht, weil Sie Looping und jede '.detailsFirewall' Klasse angehängt, aber in den zweiten, wenn Block Sie nicht Looping und jede Überprüfung ..

Beispiel:

Wechsel:

if (value.type == 'Firewall URL') { 
    if ($('.detailsFirewall').attr('id') == 'Firewall' + value.thing_id) { 
     $('#Firewall' + value.thing_id).wrap('<a target="_blank" href="' + value.value + '" />'); 
    } 
} 

An:

if (value.type == 'Firewall URL') { 
    //Will check each detail appended 

    $('.detailsFirewall').each(function(){ 

     //Now you can reference this to get current element in iteration 

    if ($(this).attr('id') == 'Firewall' + value.thing_id) { 


     $('#Firewall' + value.thing_id).wrap('<a target="_blank" href="' + value.value + '" />'); 
    } 



    }) 


} 

hoffe, das hilft

Verwandte Themen