我需要能够点击l65,仅适用于l63 = sell的订单。
警告: 由于某些原因,这个网站每个订单一遍又一遍地使用相同的ID,但由于这不是我的网站,我无法改变它。
我当前订单的代码:
<div id="orderlist">
<label id="l61">05/19/2014 08:57:34</label>
<label id="l62">0.00066000</label>
<label id="l63">Buy</label>
<label id="l64">6</label>
<label id="l64">6</label>
<label id="l62">0.00396000</label>
<label id="l65" onclick="cancelOrder(346046);">Cancel</label>
<div id="b1"></div>
<label id="l61">05/19/2014 03:08:35</label>
<label id="l62">0.00078000</label>
<label id="l63">Sell</label>
<label id="l64">2</label>
<label id="l64">1</label>
<label id="l62">0.00078000</label>
<label id="l65" onclick="cancelOrder(38493);">Cancel</label>
<div id="b1"></div>
<label id="l61">05/19/2014 03:12:08</label>
<label id="l62">0.00076000</label>
<label id="l63">Sell</label>
<label id="l64">14</label>
<label id="l64">14</label>
<label id="l62">0.01064000</label>
<label id="l65" onclick="cancelOrder(38495);">Cancel</label>
<div id="b1"></div>
<label id="l61">05/19/2014 03:13:49</label>
<label id="l62">0.00077000</label>
<label id="l63">Sell</label>
<label id="l64">15</label>
<label id="l64">15</label>
<label id="l62">0.01155000</label>
<label id="l65" onclick="cancelOrder(38497);">Cancel</label>
<div id="b1"></div> </div>
</div>
我需要能够在需要时点击l65,取消销售订单。 我知道唯一改变的是onclick功能是非常不方便的事实,但事实就是如此,我无法改变网站,我没有任何关联。
如果它有帮助,所有卖出订单总是在底部,所以我想的是:
getElementById总是开始看顶部,对吗?如果有办法开始查看底部,它可以从下到上看起来为l63 =卖出。 如果l63 =卖出(最下面的一个),则sript应该执行l65(底部的)点击。
这有可能吗?
编辑:
我刚刚在上面的粘贴订单中注意到,卖单的所有onclick功能都以38开头,而买单从34开始。我能用这些信息做点什么吗?
答案 0 :(得分:1)
如果网站使用的ID不是唯一的,那么您绝对没有办法可靠地使用getElementById,因为ID的基本规则是它们引用一个元素< / strong>即可。使用非唯一ID是HTML中最大的禁忌,因此,根据您的数据集的设计方式,您可以使用几乎没有独特的特征来选择您正在寻找的特定标签。
但是,由于您现在知道代表销售订单取消按钮的所有元素都有共享特征(订单编号的一部分,根据问题编辑),这里有一种使用JavaScript的方式querySelectorAll方法只捕获您正在寻找的元素:
var sales = document.querySelectorAll('label[onclick^="cancelOrder(38"]');
现在您只想编写一个foreach循环来运行每个所选元素的onclick函数。这是一个完全有效的jsFiddle以非常简单的方式展示这一点:http://jsfiddle.net/7fEs6/4/
var sales = document.querySelectorAll('label[onclick^="cancelOrder(38"]');
[].forEach.call(
sales,
function(el){
el.onclick();
}
);
答案 1 :(得分:0)
if( document.getElementById('l63').innerHTML === 'sell' )
{
dosomething();
}
或
if( document.getElementById('l63').nodeValue === 'sell' )
{
dosomething();
}
了解更多信息,请访问https://developer.mozilla.org/en/docs/Web/API/Element
答案 2 :(得分:0)
正如其他评论中所述。这不是一个理想的案例。但是试试这个(IE9 +):
var list = document.getElementById('orderlist').innerHTML;
var orders = list.split(/<div id="b1"><\/div>/);
orders.forEach(function(order, i){
order = order.trim();
if (order != '') {
var sell = order.match(/<label id="l63">(.*)<\/label>/)[1];
if (sell == 'Sell') {
var orderNumber = order.match(/cancelOrder\((\d*)\);/)[1];
console.log('cancelling order: ', orderNumber);
cancelOrder(orderNumber);
}
}
});
这是working demo(打开你的控制台查看消息)
这是一个书签:
javascript:(function()%7Bvar%20list%20%3D%20document.getElementById('orderlist').innerHTML%3Bvar%20orders%20%3D%20list.split(%2F%3Cdiv%20id%3D%22b1%22%3E%3C%5C%2Fdiv%3E%2F)%3Borders.forEach(function(order%2C%20i)%7Border%20%3D%20order.trim()%3Bif%20(order%20!%3D%20'')%20%7Bvar%20sell%20%3D%20order.match(%2F%3Clabel%20id%3D%22l63%22%3E(.*)%3C%5C%2Flabel%3E%2F)%5B1%5D%3Bif%20(sell%20%3D%3D%20'Sell')%20%7Bvar%20orderNumber%20%3D%20order.match(%2FcancelOrder%5C((%5Cd*)%5C)%3B%2F)%5B1%5D%3Bconsole.log('cancelling%20order%3A%20'%2C%20orderNumber)%3BcancelOrder(orderNumber)%3B%7D%7D%7D)%7D)()