0

我目前正在尝试对由 bookweb(书店购物车解决方案)动态生成的教科书列表进行排序。我想按规定或推荐的教科书类型订购购物车。目前,购物车问题在类型字段中提供该信息,因为我们无法编辑购物车 cgi 文件以对它们进行排序。所以初级排序是按科目,一个学生最多可以输入4个,二级排序是按规定或推荐的教科书类型按该顺序排序。它目前的格式如下:

Title             Type          Author           ISBN                Price

Subject Name      
Textbooks         Prescribed    xxxx             xxxx                xxx
Textbooks         Recommended   xxxx             xxxx                xxx

Subject Name....//it then repeats for all subjects entered

我需要的是:

Title          Author           ISBN                Price

Subject Name 
Prescribed     
 Textbooks     xxxxx            xxxx                xxx
Recommended 
 Textbooks     xxxxx            xxxx                xxx

Subject Name....//it then repeats for all subjects entered

我曾尝试使用 Javascript 和 CSS 根据类型对书籍进行颜色编码,但它只执行第一行并且只规定:

if (<BOOKWEB-TYPE> == "Prescribed"){
  //alert("prescribed");
  document.getElementById("textbook").className = "bsPrescribed";
}
else if (<BOOKWEB-TYPE> == "Recommended"){
  //alert("recommended");
  document.getElementById("textbook").className = "bsRecommended";
}

我输入了故障排除警报,即使列表中有推荐的书籍,也只会出现规定的警报。我也尝试过 getElementsByName 但这根本不起作用。即使它这样做了,尽管我仍然会有混合颜色,因为它不会按首选的这两个类别(规定或推荐)对书籍进行分类。

实现这一目标的最快、最简单的方法是什么。

更新1:

现在 getElementById 甚至没有突出显示第一行,它确实改变了类,但 CSS 从未生效。现在连班级都没有改变。

更新2:

糟糕,我在这里打错了,修复它并检查代码是否正常,但现在它根本不运行该脚本,进一步搞乱我意识到我需要引号<BOOKWEB-TYPE>所以:

if ("<BOOKWEB-TYPE>" == "Prescribed"){
  alert("prescribed");
  document.getElementById("textbook").className = "bsPrescribed";
}

else if ("<BOOKWEB-TYPE>" == "Recommended"){
  alert("recommended");
  document.getElementById("textbook").className = "bsRecommended";
}

但是现在它所做的是它只更新第一行并在达到规定书籍时将其着色为绿色,在达到推荐书籍时将其着色为黄色(根据定义的 CSS 类),但它不会更改任何其他的类第一行之后的书。尽管警报显示正常,但它们应该正常显示,所以我知道它与推荐的区别。

更新 3:

试过这个,现在即使突出显示也不起作用,因为课堂上没有改变。我认为相同的ID会是一个问题。

if ("<BOOKWEB-TYPE>" == "Prescribed"){
  alert("prescribed");
  document.getElementsByName("textbook").className = "bsPrescribed";
}
else if ("<BOOKWEB-TYPE>" == "Recommended"){
  alert("recommended");
  document.getElementsByName("textbook").className = "bsRecommended";
}

更新 4: 教科书行的 HTML 代码:

<tr name="textbook" id="textbook" valign=top>
<td align=center valign=top class="bntablerow"><input type="checkbox" name="<BOOKWEB-APN>" /></td>
<td id="bntable" class="bntablerow"><a href="<BOOKWEB-BINHREF>details<BOOKWEB-CGIEXT>?ITEMNO=<BOOKWEB-APN>"><BOOKWEB-TITLE></a></td>
<td class="bntablerow"><BOOKWEB-TYPE>&nbsp;</td>
<td class="bntablerow"><BOOKWEB-AUTHOR>&nbsp;</td>
<td class="bntablerow"><BOOKWEB-ISBN>&nbsp;</td>
<td align="right" class="bntablerow">$<BOOKWEB-PRICE></td>

更新5: 所以我将代码更改为:

 var myTR = document.getElementsByTagName('tr');
  for (var i=0;i<myTR.length;i++) {
    if ("<BOOKWEB-TYPE>" == "Prescribed") {
      myTR[i].className = 'bsPrescribed';
    }
  }

这会为规定的颜色和推荐的不着色,这没关系,但问题是它一次只适用于一个主题,如果你有两个或三个主题,然后它会为所有行着色。有任何想法吗?

4

2 回答 2

0

正如@Morpheus 所提到的,=是一个赋值运算符。因此,您正在分配<BOOKWEB-TYPE>该值Prescribed,而不是检查它是否包含该值。

您应该使用比较运算符=====.

更多信息

于 2013-05-14T08:17:46.403 回答
0

getElementsByName()在您的情况下选择所有具有名称的元素textbook。您需要使用getElementById()来获取一个元素并为其设置样式,但它的 ID 必须是唯一的。为您的元素提供唯一 ID,您应该进行排序。

于 2013-05-15T07:21:56.097 回答