1

Ich verwende bootstrap table in meiner Webseite und möchte vollständige Textdaten aus allen Tabellenzellen, wenn Paginierung aktiviert ist. Ich habe die folgende Methode versucht und es gibt alle Daten:So erhalten Sie vollständige Daten von (html) Bootstrap-Tabelle, wenn Paginierung aktiviert ist

var data = $('#' + tableID).bootstrapTable('getData') 

Jetzt, als ich data Objekt durchqueren für jede Zelle zu bekommen Wert es funktioniert gut, aber für diejenigen Zellen, die eine verschachtelte HTML haben, zum Beispiel:

<td class="danger">cell 4</td> 
    <td> 
    <a href="https://www.google.com">google</a> 
    </td> 

nun in diesem Fall möchte ich Wert für die zweite Zelle als google erhalten aber es gibt mir ganze html als

<a href="https://www.google.com">google</a> 

Irgendeine Idee, wie ich nur Textwert bekommen kann.

Ich kann keine serverseitige Operation ausführen, ich muss dies mit Javascript/jquery erreichen. Ich habe auch versucht jquery mit:

function getColData(tableID,colIndex) { 
    var colArray = $('#' + tableID + ' td:nth-child'+'('+colIndex+')').map(function(){ 
      return $(this).text(); 
     }).get(); 
     return colArray 
    } 

es gibt richtig Daten, sondern nur die auf aktive Seite sichtbar ist, und ich möchte alle Daten.

+0

können Sie bitte Ihren Code in jsfiddle hinzufügen? –

+0

Hier ist der Link http://jsfiddle.net/e3nk137y/7373/, Ich habe Beispielcode hinzugefügt und die Daten werden in Alarm angezeigt. Ich kann es nicht richtig durchqueren. – TechMaster

+1

http://stackoverflow.com/questions/32134884/getting-values-of-selected-table-rows-in-bootstrap-using-jquery –

Antwort

2

Da die eigentlichen Daten als String eingehen, glaube ich nicht, dass bootstrap-table sie von den anderen Daten unterscheiden kann. Die einfache Lösung, die ich mir vorstellen kann, ist die Verwendung von substring(), um die Daten aus den Zellen zu extrahieren, die benutzerdefiniertes HTML enthalten.

http://jsfiddle.net/vwg5Lefz/

Die Alternative ist durch die erzeugte Tabelle gehen <td> und verwenden text() die Textdaten aus den Zellen zu erhalten.

http://jsfiddle.net/n0djy60v/

+0

Die zweite Lösung ist keine Option, da sie keine vollständigen Daten zurückgibt, wenn die Paginierung aktiviert ist. Erste Lösung ist in Ordnung, aber nicht sehr elegant, weil es brechen kann, wenn ich Tags innerhalb der Zelle geschachtelt habe, aber ich denke, dies ist nur machbare Wahl, die ich habe, ich glaube, ich kann Teil des Codes zu Textinhalt in Zelle durch Entfernen zu verallgemeinern alle Tags. Danke! – TechMaster

+0

Kein Problem, ich weiß, dass es nicht genau die Lösung ist, aber wenn ich eine elegantere Lösung finde, die in einem zukünftigen Update für das Plugin ähnlich ist, werde ich meine Antwort sicher aktualisieren. :) –

2

Basierend auf Dateien auf JSFiddle ich das JS Teil geändert haben sich wie folgt, wird dies der Text auf jedem td erhalten (d. Text oder Textinhalt) und nicht die Werte ihrer Attribute. Im Grunde durchläuft das DOM die Suche nach in Einsen eingebetteten Tags - mit Ausnahme der Tags in der Tabelle - und erhält dann den Textwert.

var table = $('#table'), button = $('#button'); 
button.click(function() { 
    var data = []; 
    table.find('tr:not(:first)').each(function(i, row) { 
    var cols = []; 
    $(this).find('td').each(function(i, col) { 
     cols.push($(this).text()); 
    }); 
    data.push(cols); 
    }); 
    alert(data); 
}); 

Sie können es sehen in Aktion here

UPDATE: Dadurch werden Sie alle Daten erhalten, unabhängig davon, Paginierung, auch wird es Tags und verschachtelte Tags abzustreifen.

var table = $('#table'), button = $('#button'); 

button.click(function() { 
    var messedData = table.bootstrapTable('getData'); 
    var data = []; 
    $.each(messedData, function(i, row) { 
    var rowData = { 
     'name': row['0'], 
     'star': row['1'], 
     'forks': row['2'], 
     'desc': row['3'], 
    } 

    for (prop in rowData) { 
     var tmp = document.createElement("div"); 
     tmp.innerHTML = rowData[prop]; 
     rowData[prop] = tmp.textContent || tmp.innerText || ""; 
    } 

    data.push(rowData); 
    }); 
    console.log(data); 
}); 

können Sie sehen, es here

+0

Hey, Danke, aber dieser Code wird nicht funktionieren, falls die Paginierung eingeschaltet ist. Also ist jede Lösung, die DOM durchläuft, keine Option, weil ich komplette Daten unabhängig von der Paginierung erhalten muss. Sie können hier 5 Datensätze pro Seite auswählen und dann klicken, Datensätze fehlen, da Dom-Objekte nicht für unsichtbare Seiten vorhanden sind. http://jsfiddle.net/e3nk137y/7447/ – TechMaster

+0

@TechMaster, überprüfen Sie das Update, hoffe es hilft. –

Verwandte Themen