我自己的看法是:
function street() {
var x = Math.floor(Math.random()*2 + 1),
z = document.getElementById("test"),
// parses the text of the element, turning it into a base-10 number:
n = parseInt(z['textContent' || 'innerText'], 10);
// sets the text of the element to be the sum of
// the current number + generated number:
z['textContent' || 'innerText'] = n + x;
}
JS 小提琴演示。
使用的原因parseInt()
是因为+
运算符要么将两个数字相加,要么将两个字符串连接起来。如果将字符串和数字混合使用,则数字的类型将被强制为字符串,并且'1' + 2
> '12'
。
所以:
1 + 2 // 3
'1' + '2' // '12'
'1' + 2 // '12'
1 + '2' // '12'
我使用['textContent' || 'innerText']
(W3C 方法或 MS 方法)是为了避免意外拾取任何可能已附加到元素的序列化 HTML 元素'test'
。
顺便说一句,这一行:
var z=document.getElementById("test")
找到一个 DOM 节点,而不是字符串;要查找包含在 DOM 节点中的字符串,您需要使用textContent
,innerText
或innerHTML
(后者是最简单的,并且最兼容跨浏览器,但如果数字包含在任何子元素中,则会失败)。
我还建议摆脱突兀的 JavaScript,并将事件处理程序绑定到 HTML 之外(这使得将来的修改更容易,因为更少地寻找onclick
事件处理程序来修改函数调用);在第一个例子中,这涉及到给出button
一个id
选择它的方法:
// getting a reference to the DOM node:
var button = document.getElementById('button');
// binding the function to the event of the button being clicked:
button.onclick = street;
JS 小提琴演示。
或者:
// get all the button elements:
var buttons = document.getElementsByTagName('button'),
// select the first of those elements:
button = buttons[0];
button.onclick = street;
JS 小提琴演示。
首选(在实现 DOM 级别 2 和/或 3 的当代浏览器下):
var buttons = document.getElementsByTagName('button'),
button = buttons[0];
button.addEventListener('click', street);
JS 小提琴演示。