我正在尝试在pre标签中的数字数组中计算某些数字。例如计算有多少个数字等于或大于7。例如,我有这个
<pre class="data">2 7 3 1 2
6 6 2 5 3
8 2 5 9 9
5 10 5 6 10
2 10 3 </pre>
我想出了一种通用的方法:
document.getElementsByTagName ('PRE')[0].firstChild.data = document.getElementsByTagName ('PRE')[0].firstChild.data.replace (/\t+$/, '')
但是我不知道如何得到各个数字。是数组吗?还是我需要按空格解析的数字列表?
我看过以下线程:Using <pre> tag to display data in columns?,并尝试使用for循环抓$ entry [i],但我无法读取单个数字。
pre标签的内容只是文本。为了访问数字,您必须解析文本。我假设您只需要数字列表,并且这些列没有意义。
如果是这样,您需要做的是在空白处分割文本,然后处理每个项目:
var number_string = document.getElementsByTagName ('PRE')[0].firstChild.data;
var numbers = number_string.split(/[\s]+/);
var a_number;
for (var i = 0; i <= numbers.length; i++) {
a_number = parseInt(numbers[i]); // assuming the numbers are whole numbers.
}
请注意,numbers [i]实际上是数字的字符串表示形式,因此您需要使用parseInt(numbers [i])来获取实数。 (或者如果不是整数,则为parseFloat(numbers [i]))
希望有帮助。
杰伊
以下内容将为您提供二维数组:
var str = document.getElementsByTagName('pre')[0].textContent;
str // take the string and
.split('\n') // break it into an array of lines;
.map(function(line) { // then transform each line by
return line // taking the line,
.trim() // removing leading and trailing spaces,
.split(/\s+/) // and breaking it into an array at whitespace,
.map(Number); // with each piece cast to a number.
});
String.prototype.trim = function() { // just in case of an old browser
return this.replace(/^\s+|\s+$/gm,'');
}
var str = document.getElementById('data').innerHTML.trim();
var data = str.split(/\s+/);
alert(data);
数据将是一维数字数组(准确地说是带数字的字符串,但这并不重要-易于转换)。
http://jsbin.com/mepulu/2/edit
var text = document.getElementsByClassName('data')[0].innerHTML; // Text
var values = text.split(/\s+/); // Array of strings
var numbers = values.map(function(num) {
return parseInt(num, 10);
});
numbers; // Array of integers