我編寫了以下JavaScript函數以從Yahoo Finance獲取股票信息。我想與一個簡化的代碼循環,以避免重複這些三行:如何通過for循環簡化我的JavaScript函數?
var cell = row.insertCell(0);
var newText = document.createTextNode(data.query.results.quote.Symbol);
cell.appendChild(newText);
我試圖與這些線以取代上述情況,也沒有用。你有什麼建議嗎?
var dataElement=[data.query.results.quote.Symbol,
data.query.results.quote.StockExchange,
data.query.results.quote.Ask,
data.query.results.quote.Bid,
data.query.results.quote.PERatio,
data.query.results.quote.DividendYield,
data.query.results.quote.PriceBook];
for (i = 0; i < dataElement.length; i++) {
var cell = row.insertCell(i);
var newText =document.createTextNode(dataElement[i]);
cell.appendChild(newText);
}
下面是完整的HTML/JS代碼,而無需在for循環:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-GB" xml:lang="en-GB">
<head>
<meta charset="UTF-8" />
<title>
Retrieve stock data from Yahoo Finance
</title>
<script type="text/javascript" src="jQuery.js"></script>
</head>
<body>
<input type="text" id="inputSymbol" />
<table id='stockDataTable'>
<thead>
<tr>
<td>Symbol</td>
<td>Stock Exchange</td>
<td>Ask</td>
<td>Bid</td>
<td>PE Ratio</td>
<td>Dividend Yield</td>
<td>Price-to-Book Ratio</td>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td colspan="3" id='status'></td>
</tr>
</tfoot>
</table>
<button type="submit" onClick="addTicker();">Add Ticker to Table</button>
<button type="submit" onClick="deleteTicker();">Remove Ticker from Table</button>
<script type="text/javascript">
function addTicker() {
var url = "http://query.yahooapis.com/v1/public/yql";
var symbol = $("#inputSymbol").val();
var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')");
var table = document.getElementById("stockDataTable").getElementsByTagName('tbody')[0];
var row = table.insertRow(table.rows.length);
$.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env")
.done(function (data) {
var cell = row.insertCell(0);
var newText = document.createTextNode(data.query.results.quote.Symbol);
cell.appendChild(newText);
var cell = row.insertCell(1);
var newText = document.createTextNode(data.query.results.quote.StockExchange);
cell.appendChild(newText);
var cell = row.insertCell(2);
var newText = document.createTextNode(data.query.results.quote.Ask);
cell.appendChild(newText);
var cell = row.insertCell(3);
var newText = document.createTextNode(data.query.results.quote.Bid);
cell.appendChild(newText);
var cell = row.insertCell(4);
var newText = document.createTextNode(data.query.results.quote.PERatio);
cell.appendChild(newText);
var cell = row.insertCell(5);
var newText = document.createTextNode(data.query.results.quote.DividendYield);
cell.appendChild(newText);
var cell = row.insertCell(6);
var newText = document.createTextNode(data.query.results.quote.PriceBook);
cell.appendChild(newText);
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
$("#status").text('Request failed: ' + err);
});
}
</script>
<script type="text/javascript">
function deleteTicker() {
var symbol = $("#inputSymbol").val();
try {
var table = document.getElementById("stockDataTable");
var rowCount = table.rows.length;
for(var i=0; i<table.rows.length; i++) {
if(table.rows[i].cells[0].innerHTML == symbol) {
table.deleteRow(i);
i--;
}
}
}catch(e) {
alert(e);
}
}
</script>
</body>
</html>
我看到'''Symbol','StockExchange',...]'這樣的數組在'quoteSymbol'和'quote [array [0]]'是等價的。 – tadman
出了什麼問題?你有錯誤嗎? – showdev
是的,對不起。我收到以下錯誤信息:類型錯誤:data.query未定義 \t VAR dataElement = \t [\t data.query.results.quote.Symbol, – lcazarre