Die AJAX-Antwort gibt eine Liste von <a> Elementen zurück:

<a href="/1/">One</a>
<a href="/2/">Two</a>
<a href="/3/">Three</a>

Wie wähle ich nur die ersten n a Elemente aus der Antwort aus?

$.ajax({
    url: '/' + page,
    success: function (res) {
        btn.after($('a', $(res)).slice(0,20));
    }
});

Das ist es, was ich gerade versuche, aber ich bekomme ein Uncaught Error: Syntax error, unrecognized expression gefolgt von der gesamten Antwort.

6
Jürgen Paul 5 Dez. 2013 im 19:06

3 Antworten

Beste Antwort

Die Antwort hatte am Ende zwei schließende div Elemente, aber keine zwei Öffnungen, also musste ich eines machen:

$.ajax({
    url: '/' + page,
    success: function (res) {
        btn.after($('a', $($.trim('<div><div>'+res))).slice(0,20));
    }
});
1
Jürgen Paul 11 Dez. 2013 im 16:35

Das Problem, das Sie haben, ist die Tatsache, dass der Kontext-Selektor nichts zurückgibt. Ein einfacher Test zeigt es.

console.log($('a', $(res)))

Brechen Sie es in Stücke. Sie müssen Filter für den Inhalt verwenden, der vom Server zurückgegeben wird, da es sich um eine Liste von Ankern handelt.

var content = $(res);
var anchors = content.filter("a");
var anchorLimit = anchors.slice(0,20);
btn.after(anchorLimit);

Eine andere Möglichkeit ist, das zu tun, was Sie getan haben, aber es in ein Div zu wickeln.

$('a', $("<div>" + res + "</div>"))

JSFiddle

0
epascarello 5 Dez. 2013 im 15:41

Folgendes würde ich tun:

$.ajax({
    url: '/' + page,
    success: function (res) {
        btn.after(res.split('</a>').splice(0, num).join('</a> ') + '</a>');
    } });

Es teilt es auf und gibt nur die gewünschten Elemente zurück.

JSFiddle: http://jsfiddle.net/howderek/VamZt/

0
howderek 5 Dez. 2013 im 15:30