2016-03-29 17 views
0
function drawVisualization() { 
    var query = new google.visualization.Query('http://spreadsheets.google.com/tq?key=XXXXXXX'); 
    query.setQuery('SELECT B, C, D, E, F, G, H where upper(B) like upper("%<?php echo $search; ?>%") or upper(D) like upper("%<?php echo $search; ?>%") or upper(E) like upper("%<?php echo $search; ?>%") or upper(F) like upper("%<?php echo $search; ?>%") order by G DESC label G "Data"'); 
    query.send(handleQueryResponse); 
} 

function handleQueryResponse(response) { 
    if (response.isError()) { 
     alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
     return; 
    } 

    var data = response.getDataTable(); 

    var formatter = new google.visualization.PatternFormat(
     '<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{2}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 
    // Apply formatter and set the formatted value of the first column. 
    formatter.format(data, [0, 1, 2, 3, 4, 5, 6], 2); 

    var view = new google.visualization.DataView(data); 
    view.setColumns([2, 0, 1, 4, 5]); // Create a view with the first column only. 

    visualization = new google.visualization.Table(document.getElementById('table')); 
    visualization.draw(view, { 
     legend: 'bottom', 
     allowHtml: true 
    }); 

} 

Dies ist die kleineren Schnipsel interessieren diese Frage:Escaping von Zeichen in Javascript

var formatter = new google.visualization.PatternFormat('<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{2}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 

Es funktioniert in Ordnung (es gibt einen legit Anker mit den richtigen Daten), mit der Ausnahme, wenn im Titel der Dokument (Ausgang durch die Variable {2}) vorhanden ist, ein Zeichen wie ein doppeltes Anführungszeichen (") der Anker Syntax würde geschraubt erhalten.

enter image description here

Muss ich die doppelten Anführungszeichen durch eine Funktion wie replace ersetzen/ersetzen? Wie kann ich das machen?

JSFIDDLE

+0

Können Sie ein laufendes Beispiel mit JavaScript-Bibliotheken bereitstellen, die auf https://jsfiddle.net/ enthalten sind? –

+0

Hallo Quasimodo, das ist der JSFiddle: https://jsfiddle.net/multiformeingegno/xyqF7/15/ – MultiformeIngegno

+0

Siehe die Jfiddle in meiner Antwort. –

Antwort

0

auf den Ersatz Versuchen für {2} so etwas wie:

var str = 'say: "blabla"'; 
str = str.replace(/"/g, '\\"'); 
console.log(str); 

Ich habe Ihre fiddle code aktualisiert und eingefügt haben:

// add a column with manipulated data 
    var targetColIdx = data.getNumberOfColumns();   // will be the index of added column 
    data.addColumn('string'); 
    var sourceColIdx = 2;         // get data from col 2 
    var rowCount = data.getNumberOfRows();     // save for loop condition 
    var manipulated = ""; 
    for(var rowIndex=0; rowIndex<rowCount; rowIndex++) 
    { manipulated = data.getValue(rowIndex, sourceColIdx); // get original 
    manipulated = encodeURIComponent(manipulated);  // do some manipulation 
    data.setCell(rowIndex, targetColIdx, manipulated); // store in new column 
    } 

// modificated format: only use uri-encoded column in onclick attribute 
    var formatter = new google.visualization.PatternFormat(
    '<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{'+targetColIdx+'}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 

Ich habe nicht weiter untersucht, was mit der Zeichenfolge im Click-Ereignishandler geschehen wird. Vielleicht benötigen Sie eine andere Kodierung oder ein Escaping wie im obigen Beispiel von RegExp. Sie können die Zeile manipulated = encodeURIComponent(manipulated); an Ihre Bedürfnisse anpassen.

+0

Kann ich 'console.log ({2} .replace (/"/g, '\\ "'));'? – MultiformeIngegno

+0

Ich kenne die Google API nicht. Ich denke, die Variable {2} ist ein Feld in 'Daten', das aus' response.getDataTable() 'abgerufen wurde. 'console.log' ist nur eine Debug-Ausgabe. Sie können die Konsole in Firefox mit Strg + Umschalt + k öffnen. –

+0

Ich denke, 'data [1]' (weil der Index auf 0 basiert) könnte der Ersatz {2} sein. Probieren Sie eine 'console.log (data)', öffnen Sie die Konsole, klicken Sie auf die Ausgabe und untersuchen Sie die Datenstruktur. –