Javascript 选择并获取与页面上其他元素具有相同类的范围的内容

Javascript 选择并获取与页面上其他元素具有相同类的范围的内容,javascript,jquery,html,google-chrome-extension,Javascript,Jquery,Html,Google Chrome Extension,我试图做一些看似简单的事情,但结果却比我想象的要困难 我在一个页面上有4个跨度元素(我无法控制),它们都具有相同的类ID(BOfSxb),我只需要编辑其中的两个元素——第二个和第四个元素。所以我不确定如何只选择这两个元素,在选择之前,我需要知道第二个或第四个跨度元素的内容(2和4的内容相同)。我知道如何获取内容,但我将两者结合起来,因此如果内容是2304400,我将返回23044002304400 到目前为止,我是如何获得内容的: var spanContent = $("span.BOfSxb

我试图做一些看似简单的事情,但结果却比我想象的要困难

我在一个页面上有4个跨度元素(我无法控制),它们都具有相同的类ID(BOfSxb),我只需要编辑其中的两个元素——第二个和第四个元素。所以我不确定如何只选择这两个元素,在选择之前,我需要知道第二个或第四个跨度元素的内容(2和4的内容相同)。我知道如何获取内容,但我将两者结合起来,因此如果内容是2304400,我将返回23044002304400

到目前为止,我是如何获得内容的:

var spanContent = $("span.BOfSxb:contains(2,304,400)").text()

console.log(spanContent); //returns 2,304,4002,304,400 ( I need 2,304,400)
上面的另一个问题是:contains有一个我事先不知道的数字

在我从第二个或第四个跨度中获取内容之后,我需要比较它,看看它属于什么范围,然后用它做一些其他的事情。比如:

if ($(".BOfSxb:contains("+ spanContent + ")").text() >= 0 && $(".BOfSxb:contains("+ spanContent + ")").text() <= 1000) {

$("span.BOfSxb:contains("+ spanContent + ")").replaceWith(finalDiv);

} else if ($(".BOfSxb:contains("+ spanContent + ")").text() >= 1001 && $(".BOfSxb:contains("+ spanContent + ")").text() <= 1000000) {

$("span.BOfSxb:contains("+ spanContent + ")").replaceWith(finalDiv2);

} else {

//something else
}

如果($(“.BOfSxb:contains(“+spanContent+”)).text()>=0&&$(“.BOfSxb:contains(“+spanContent+”)).text()=1001&$(“.BOfSxb:contains(“+spanContent+”).text()您可以使用
:n类型的
选择器。但它可能在旧浏览器中不起作用


如果我理解你的问题,这应该可以:

HTML:

1234
其他内容1
1234
其他内容2
JavaScript(使用jQuery):

var内容='1234';
//注意:
//(i)内容是一个字符串。如果
//直接写入值,如下所述:https://api.jquery.com/contains-selector/
//(ii)使用类通过jQuery选择对象将返回一个元素数组
变量span=$('.span:contains('+content+'));
跨度。每个(功能(i){
var value=parseInt($(this.text());
如果(值>0&&值<1000){
console.log(值);
}
});
工作区:


更新:正如@zfrisch所建议的,您也可以通过它们的位置来获取跨度。如果您不确定确切的顺序,这里提供的解决方案是解决问题的另一种方法。

您可以通过使用元素相对于其类的索引号来指定要获取的元素。您可以使用jquery
.eq()
方法来实现这一点

$(".span.BOfSxb").eq(1).text();
$(".span.BOfSxb").eq(3).text();
然后,您可以使用
parseInt();
方法将它们更改为数字,并根据需要进行添加。parseInt()方法从字符串中返回一个整数。当您从元素中获取文本时,由于它们不被视为数字,因此无法将它们添加到一起,因此它们被视为文本字符串


这是提琴:

你能添加一个JSFIDLE吗?很抱歉,我应该添加一个Chrome扩展,它将在网站上编辑这些元素。我不确定JSFIDLE在这种情况下是否有效。你可以使用第n个子选择器。似乎span变量正在返回提琴中span标记的索引号,而不是第1个e元素。我使用eq()实现了它。感谢您通知我此错误。但是,我认为使用“each”函数比让jQuery再次搜索.span元素要好得多。
var content = '1234';
// Notice:
// (i) content is a string. You should use quotes if you 
// directly write the value, as specified here: https://api.jquery.com/contains-selector/
// (ii) Using classes to select objects with jQuery will return an array of elements
var spans = $('.span:contains(' + content + ')');

spans.each(function(i){
    var value = parseInt($(this).text());
    if(value > 0 && value < 1000){
        console.log(value);
    }
});
$(".span.BOfSxb").eq(1).text();
$(".span.BOfSxb").eq(3).text();