2016-06-04 13 views
0

ich eine Funktion in meinem Code haben, die ich brauche Links in meiner Seite zu ändern, sieht es so etwas wie dieses:JQuery-Selektor für Domänenliste

$('a').each(function(){ 
    // code here related to HREF attr 
}); 
$('form').each(function(){ 
    // Code relate to the TARGET attr 
}); 

ich diese Funktion auf alle Links und Ziele anwenden müssen von Formularen, die auf bestimmte Domänen verweisen. Nehmen wir an, ich habe eine Liste wie diese: www.example.com,www.domain.com,www.anotherdomain.com

Wie kann ich den Selektor so ändern, dass er nur auf Links angewendet werden kann und sich mit den Domänen in der Liste verbinden lässt?

+0

jsfiddle verwenden verwenden 'indexOf' –

+0

Ändern Sie den Code anstelle des Selektors, dies könnte funktionieren –

+0

Überprüfen Sie bitte die aktualisierte Antwort. –

Antwort

1

können Sie .filter verwenden:

var $exampleComLinks = $('a').filter(function() { 
    return this.href.indexOf('https://example.com') == 0 
     || this.href.indexOf('https://example2.com') == 0 
     || this.href.indexOf('https://example3.com') == 0; 
}); 

Oder einfach if-Anweisung:

$('a').each(function() { 
    if (this.href.indexOf('https://example.com') == 0 
     || this.href.indexOf('https://example2.com') == 0 
     || this.href.indexOf('https://example3.com') == 0) { 
    console.log('do something this $(this)'); 
    } 
}); 

Mit @Praveen Kumar ‚s domainList Ansatz:

var domainsList = ["www.example.com", "www.domain.com", "www.anotherdomain.com"]; 
$('a').each(function() { 
    if (domainsList.indexOf($(this).attr("href").replace(/https?:\/\/([^\/]*).*/gi, "$1")) > -1) 
     // Do it. 
}); 
$('form').each(function() { 
    // Code relate to the TARGET attr 
    if (domainsList.indexOf($(this).attr("href").replace(/https?:\/\/([^\/]*).*/gi, "$1")) > -1) 
     // Do it. 
}); 
+0

Ich halte den letzten. Lass es uns versuchen. –

1

Wenn die Ziele Website-URL, die ich vorschlagen Hinzufügen von http: // oder https: // und dann (an anderer Stelle müssen Sie http: // entfernen von attr ("Ziel") oder href beim Vergleich.):

var domains="http://www.example.com,http://www.domain.com,http://www.anotherdomain.com"; 
$('a').each(function(){ 
    if (domains.indexOf($(this).attr("href")) > -1) 
}); 
$('form').each(function(){ 
    if (domains.indexOf($(this).attr("target")) > -1) 
}); 
+0

Sollte es nicht '= 0 'anstelle von'> = -1' sein? –

+0

Danke. Nicht von ihnen. Aber es sollte> -1 .korrigiert sein! @Kenny Lajara –

+0

@andlrc Sie sind sehr richtig. Aber die Frage war insofern nicht allgemein. –

1

Sie new RegExp() mit Parameterarray Liste verbunden mit Sichter "|" kann RegExp.prototype.test()

var list = ["www.example.com","www.domain.com","www.anotherdomain.com"]; 

$("a, form").each(function(i, el) { 
    if (new RegExp(list.join("|")).test(this.href || this.target)) { 
    // do stuff 
    } 
}) 

Sie https://jsfiddle.net/xkjpxd6L/

+0

_ "Dies wird nicht funktionieren, da $ (this) .attr ('href') wahrscheinlich Unterverzeichnisse enthält." _? Nicht sicher, was du meinst? – guest271314

+0

Ich glaube, er meint, dass der Link nicht auf die Homepage der Domains gerichtet sein muss. –

Verwandte Themen