87,993
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>With Statement Example 1</title>
</head>
<body>
<input type="button" value="按人气排" id="people"/>
<input type="button" value="按人销量排" id="sale"/>
<input type="button" value="按信誉排" id="reputation"/>
<input type="button" value="按价格排" id="price"/>
<select><option >按人气排</option>
<option >按人销量排</option>
<option >按信誉排</option>
<option >按价格排</option></select>
<ul id="list">
<li>
<dd id="img1"></dd><br />
信誉:<b>3</b>
<br />
¥<strong>123</strong><br />
销量:<em>34</em><br />
人气:<span id="pop">0</span>
<input type="button" value="座椅1加人气"/>
</li>
<li>
<dd id="img2"></dd ><br />
信誉:<b>5</b>
<br />
¥<strong>13</strong><br />
销量:<em>35</em><br />
人气:<span id="pop2">0</span>
<input type="button" value="电脑1加人气"/>
</li>
<li>
<dd id="img3"></dd><br />
信誉:<b>8</b>
<br />
¥<strong>53</strong><br />
销量:<em>134</em><br />
人气:<span id="pop3">0</span>
<input type="button" value="手机1加人气"/>
</li>
<li>
<dd id="img4"></dd><br />
信誉:<b>1</b>
<br />
¥<strong>883</strong><br />
销量:<em>24</em><br />
人气:<span id="pop4">0</span>
<input type="button" value="纸巾1加人气"/>
</li>
</ul>
</body>
<script>
window.onload = function() {
var list = document.getElementById("list");
var buttons = list.getElementsByTagName("input");
for (var i=0,len=buttons.length;i<len;i++) {
buttons[i].onclick = add;
}
function add() {
var span = this.previousSibling;
while (span.nodeType != 1) {//很可能取到空行文本节点
span = span.previousSibling;
}
var rq = parseInt(span.innerHTML);
span.innerHTML = rq + 1;
}
var sale = document.getElementById("sale");
var aSale = document.getElementsByTagName("em");
var li = list.getElementsByTagName("li");
sale.onclick = function () {
for (var i=0;i<len - 1;i++) {
for (var j=0;j<len - 1;j++) {
var aa=aSale[j].innerHTML;
var bb=aSale[j+1].innerHTML;
if (parseInt(aa) < parseInt(bb)) {
//切换li的位置,将li j->li j+1
list.insertBefore(li[j+1], li[j]);
}
}
}
}
}
</script>
</html>

var oBtn = oUl.getElementsByTagName('input');
var input = oBtn[j + 1];
oBtn[j + 1] = oBtn[j];
oBtn[j] = input;
上面是你想要切换按钮的几句关键代码。按钮是一个元素,也就是一个对象,又不是一个值,这样肯定是换不了的。
如果你想切换这两个元素的位置,因为这是冒泡排序,你只要把前一个元素移动到他的后一个的后面就行了对不对?
所以后三句代码可以去掉,就加一句
//记下oBtn[j]的位置
var j0_next = oBtn[j].nextSibling;//
var j0_parent = oBtn[j].parentNode;//
//把j放倒j+1的前面
oBtn[j+1].parentNode.insertBefore(oBtn[j], oBtn[j+1]);
//因为是放在前面所以不影响下标
j0_parent.insertBefore(oBtn[j+1],j0_next);
不过即使是这样,这些代码的问题依旧存在,因为oBtn这个类数组是动态的,它不是说你改下标的值而变化,它是根据DOM结构的变化而变化,虽然可能现在没有什么问题,但是还是不要这样写代码