- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试根据包含价格的 div 对以下静态 HTML 产品列表进行排序。在这种情况下,所有 div 都有一个 price-bold 类。有没有一种方法可以使用 javascript 对产品列表进行排序,以使用按钮/文本点击命令从低到高和从高到低排序?非常感谢您的帮助和专业知识。谢谢你,丹
<div id="gallerypaginate2" class="paginationstyle"></div>
<div id="contents">
<table width="100%" class="vertical" id="contents-table">
<tr class="pagination-row">
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="mica136-3s.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2126916" width="125" height="71" border="0" hspace="0" vspace="0" alt="3-Shade Billiard Light - Oversized" title="3-Shade Billiard Light - Oversized" /></a>
<div class="name"><a href="mica136-3s.html" title="3-Shade Billiard Light - Oversized">3-Shade Billiard Light - Oversized</a></div>
<div class="price-bold">$2,088.00</div>
</td>
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="micaf101-01-abbey.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2132333" width="125" height="118" border="0" hspace="0" vspace="0" alt="Abbey Craftsman Fan and Mica Light Kit" title="Abbey Craftsman Fan and Mica Light Kit" /></a>
<div class="name"><a href="micaf101-01-abbey.html" title="Abbey Craftsman Fan and Mica Light Kit">Abbey Craftsman Fan and Mica Light Kit</a></div>
<div class="price-bold">$711.00</div>
</td>
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="mica007.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2150148" width="103" height="125" border="0" hspace="0" vspace="0" alt="Beanpot Table Lamp" title="Beanpot Table Lamp" /></a>
<div class="name"><a href="mica007.html" title="Beanpot Table Lamp">Beanpot Table Lamp</a></div>
<div class="price-bold">$442.00</div>
</td>
<td width="25%" class="horizontal-seperator">
<a href="mica012.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2162401" width="125" height="71" border="0" hspace="0" vspace="0" alt="Buffet Table Lamp" title="Buffet Table Lamp" /></a>
<div class="name"><a href="mica012.html" title="Buffet Table Lamp">Buffet Table Lamp</a></div>
<div class="price-bold">$370.00</div>
</td>
</tr>
<tr class="pagination-row">
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="mica051.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2169261" width="125" height="71" border="0" hspace="0" vspace="0" alt="Bungalow Floor Lamp" title="Bungalow Floor Lamp" /></a>
<div class="name"><a href="mica051.html" title="Bungalow Floor Lamp">Bungalow Floor Lamp</a></div>
<div class="price-bold">$1,370.00</div>
</td>
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="mica119c.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2177066" width="125" height="71" border="0" hspace="0" vspace="0" alt="Carmel Wall Sconce" title="Carmel Wall Sconce" /></a>
<div class="name"><a href="mica119c.html" title="Carmel Wall Sconce">Carmel Wall Sconce</a></div>
<div class="price-bold">$505.00</div>
</td>
<td width="25%" class="horizontal-seperator vertical-seperator">
<a href="micaf101-bw.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2182877" width="125" height="71" border="0" hspace="0" vspace="0" alt="Ceiling Fan with Bell White Light Kit" title="Ceiling Fan with Bell White Light Kit" /></a>
<div class="name"><a href="micaf101-bw.html" title="Ceiling Fan with Bell White Light Kit">Ceiling Fan with Bell White Light Kit</a></div>
<div class="price-bold">$524.00</div>
</td>
<td width="25%" class="horizontal-seperator">
<a href="micaf101-c.html"><img src="http://ep.yimg.com/ca/I/yhst-129288146819219_2148_2192940" width="125" height="71" border="0" hspace="0" vspace="0" alt="Ceiling Fan with Coppersmith Mica Light Kit" title="Ceiling Fan with Coppersmith Mica Light Kit" /></a>
<div class="name"><a href="micaf101-c.html" title="Ceiling Fan with Coppersmith Mica Light Kit">Ceiling Fan with Coppersmith Mica Light Kit</a></div>
<div class="price-bold">$695.00</div>
</td>
</tr></table>
</div>
<div id="gallerypaginate" class="paginationstyle"><a href="#" rel="previous">Prev</a> <span class="flatview"></span> <a href="#" rel="next">Next</a></div>
最佳答案
我知道我的解决方案的长度可能会吓跑你,所以我决定制作一个纯 JS 解决方案作为挑战。
它在这里,在它所有的荣耀中:
addListeners();
function addListeners()
{
var toggle = toggleTableSort;
var node = document.getElementById("sortTables");
node.onclick = toggle();
}
function toggleTableSort()
{
var status = 0;
return function()
{
var table = getTable();
var tableData = table['data'];
var rows = table['rows'];
if(status === 0)
{
status = 1;
sortTableData(tableData, rows, "descending");
}else if(status === 1)
{
status = 0;
sortTableData(tableData, rows, "ascending");
}
}
}
function getTable()
{
var container = document.getElementById("contents-table");
var tbody = getElementNodes(container, "TBODY", 1, {})[0];
var rows = getElementNodes(tbody, "TR", 0, {"class": "pagination-row"});
var tableData = grabTableData(rows);
return {"data": tableData, "rows": rows};
}
function getElementNodes(parent, tag, num, attributes)
{
var nodes = parent.childNodes;
var temp = [];
tag = tag.toUpperCase();
if(num === 0)
{
num = nodes.length;
}
for(var i=0;i<nodes.length;i++)
{
var node = nodes[i];
if(temp.length <= num)
{
if(node.nodeType === 1 && node.tagName === tag)
{
var attributeCheck = true;
for(var attribute in attributes)
{
if(attributes.hasOwnProperty(attribute))
{
var newAttribute;
if(attribute === "class" && !node.getAttribute(attribute))
{
newAttribute = "className";
}
if(newAttribute)
{
if(node.getAttribute(newAttribute) !== attributes[attribute])
{
attributeCheck = false;
break;
}
}else if(!newAttribute)
{
if(node.getAttribute(attribute) !== attributes[attribute])
{
attributeCheck = false;
break;
}
}
}
}
if(attributeCheck)
{
temp.push(node);
}
}
}else if(temp.length > num)
{
break;
}
}
return temp;
}
function grabTableData(rows)
{
var data = [];
for(var i=0;i<rows.length;i++)
{
var row = rows[i];
var tableData = getElementNodes(row, "TD", 0, {"width": "25%"});
data = data.concat(tableData);
}
return data;
}
function sortTableData(tableData, rows, order)
{
var prices = getPrices(tableData);
var temp = trimPrices(prices);
order = order.toLowerCase();
switch(order)
{
case "descending":
temp = sortParallelData(tableData, temp, order, {"data": tableData, "rows": rows}, orderTables);
break;
case "ascending":
temp = sortParallelData(tableData, temp, order, {"data": tableData, "rows": rows}, orderTables);
break;
}
}
function orderTables(tableData, tableCells)
{
var rows = tableData['rows'];
var data = tableData['data'];
for(var i=0;i<rows.length;i++)
{
var items = tableCells.slice(i * 4, (i * 4) + 4);
var cells = data.slice(i * 4, (i * 4) + 4);
for(var j=0;j<rows[i].childNodes.length;j++)
{
var node = rows[i].childNodes[j];
rows[i].removeChild(node);
}
for(var k=0;k<items.length;k++)
{
var item = items[k];
var cell = cells[k];
rows[i].appendChild(item);
}
}
}
function getPrices(tableData)
{
var prices = [];
for(var i=0;i<tableData.length;i++)
{
var data = tableData[i];
var node = getElementNodes(data, "DIV", 1, {"class": "price-bold"})[0];
var text;
var whitespace;
if(node.innerText)
{
text = node.innerText;
}else if(node.textContent)
{
text = node.textContent;
}
whitespace = text.match(/\s+/);
text = text.replace(whitespace, "");
prices.push(text);
}
return prices;
}
function trimPrices(prices)
{
var temp = [];
for(var i=0;i<prices.length;i++)
{
var price = prices[i];
temp.push(price.replace("$", "").replace(",", ""));
}
return temp;
}
function sortParallelData(first, second, order, data, callback)
{
var matches = 0;
var parallel = first;
var cached = second;
var left, right, temp;
order = order.toLowerCase();
switch(order)
{
case "descending":
for(var i=0;i<cached.length;i++)
{
left = parseInt(cached[i], 10);
right = parseInt(cached[i+1], 10);
temp = parallel[i+1];
if(right > left)
{
cached[i+1] = left;
parallel[i+1] = parallel[i];
parallel[i] = temp;
cached[i] = right;
matches++;
}
}
break;
case "ascending":
for(var i=0;i<cached.length;i++)
{
left = parseInt(cached[i], 10);
right = parseInt(cached[i+1], 10);
temp = parallel[i+1];
if(left > right)
{
cached[i+1] = left;
parallel[i+1] = parallel[i];
parallel[i] = temp
cached[i] = right;
matches++;
}
}
break;
}
if(matches > 0)
{
sortParallelData(first, second, order, data, callback);
}else
{
callback(data, parallel);
}
}
我们做了两个假设,即您的表格有一个包含您的内容的 tbody
标记,并且每个表格行总是有 4 个 td
元素。
经测试可在以下环境中运行:Firefox 4、Chrome 4、Opera 11、Safari 4、IE 8 + Quirks 和 IE 7 + Quirks。
关于Javascript 根据类对 DIV 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588175/
我有一个 div(我认为是容器?)我希望它成为中心页面。 Billede 2 我只想让所有上下文都位于页面中心,这怎么可能? 最佳答案 Billede 2 根据您的要求
我只是在研究 jQuery,偶然发现了 Find 函数。 我是这样测试的: $(document).ready(function(){ $('button').click(function()
如何制定一个规则来做这样的事情: .container .unit:first-child(if it has inside div.box1.extra) + .box2 { top: 50px;}
我想了解为什么浏览器显示 和 的方式不同? 这是一个示例:片段 #1 的预期输出是三个并排的框:[黑色]、[蓝色]、[红色]。代码段 #2 仅显示 [black] 和 [red] - 为什么代码段 #
我有一个奇怪的问题,我无法使用正常的嘶嘶声选择器来正确选择 jQuery 中的某些内容: 这两行代码不做同样的事情。 ele.children("div.a > div").addClass("bad
我有一个包含另外两个 div 的 div first div second div 父 div 有最大高度,因此不能增长超过一定数量。但是两个子 div 可以有任何大小(动态
我在两个 div 之间有问题。 div#mainbody 是父 div 有一个背景,div 2 子 div 有自己的背景所以 div 2 浮出父级 div 但我希望它位于父级 div 中。 HTML:
我在另一个具有特定宽度的 div 中有一个 div,但我希望子 div 的宽度与浏览器屏幕大小成百分比而不是与其父 div 的百分比,这意味着当我将子 div 的宽度设置为 50% 时,我希望它的大小
我有以下代码。当单击 div 1 中的按钮时,我需要隐藏 div 1 并显示 div2。 (在 Angular HTML5 中)。我有一个带有 Controller 等的 JS 文件,目前我有两个不同
现在我可以将容器 div 的大小自动调整到内部 div,或者我可以将整个东西居中...但我不知道如何同时进行这两项操作。 下面是我拥有的 CSS/布局。现在 page 和 main 元素都居中,但如果
当一个单元格 div 包含绝对定位的 div 时,如何在表格 div 中顶部对齐两个单元格 div? 在此示例中,不包含绝对定位的 div 的单元格 div 被下推。 HTML: 1
我的程序是一个游戏,从 4 个可玩 Angular 色开始,每个 Angular 色都在自己的类 charContainer 中,这 4 个 div 位于类 character 的容器中。当玩家通过点
我有这样的东西: 现在,#page 中没有任何格式。它适用于一些内容,我的意思是,当内容更大时,#page 也有更高的高度。但是,当今天我在其中应用 #con
我有一个 React 应用程序,并且在一些 CSS 方面遇到了一个稍微大一点的问题。 我有一个 View 分为两部分。但这两个部分位于一个更大的组件中。左侧部分显示一些联系人,右侧我想显示这些联系人的
我想像 facebook 注册页面一样,一个div1(section width:1024px)有四个div,左边div2(width:50%) 有div3(fb slogan),下面div4(con
在我的网页上遇到一个问题,母版页中的页脚对于某个特定页面没有正确显示。在那个页面上,我有一个 在底部。 在我的头上敲了一会儿之后,我发现要让页脚正确显示,我需要做的就是将该行更改为: 我不明白为什么
我正在使用 this plugin用于跨浏览器兼容的灰度图像。基本上,图像最初处于低不透明度的灰度模式。当用户将鼠标悬停在图像上时,灰度逐渐变为彩色,不透明度返回到 1,之前隐藏的 div 从底部向上
这是一个 jsfiddle link of my issue HTML 8.123456 huh-fjiuetie 条件是: h
当前面的 div 中的文本溢出时,如何防止后面的内联 div 换行显示。 如您所见,对于第一个帖子,主要内容换行到第二行,因此它后面的链接显示在新行上(这是不正确的)。 但是对于第 3 篇文章,主标题
我有一个 div,当它悬停在上面时,它会激活另一个 div。当用户将鼠标移动到激活的 div 上时,我希望该 div 保留下来。这是一个片段。 当您将鼠标悬停在金色框上时,紫色框会隐藏并显示灰色框。当
我是一名优秀的程序员,十分优秀!