正在尝试使用jquery选择器查找跨度旁边的文本
Trying to find text next to a span using jquery selector
我的网页中有以下代码。我需要找到出现在类为pn
的跨度之后的产品名称。当我运行下面的代码时,我从getFirstProduct
方法中得到一个空字符串,也从getSecondProduct
方法中得到了一个空串。然而,如果我使用以下表达式,那么我会得到正确的产品名称:$("#p0 span.pn")[0].nextSibling.data
或$("#p1 span.pn")[0].nextSibling.data
,但这是使用JavaScript的,我想知道是否有一个纯jquery解决方案。
这个问题的演示在这个URL:演示代码
问题:在这两种方法中,正确的选择器应该是什么,以便它们分别返回Product 0
和Product 1
?
查找产品名称的代码
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id='p0'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 0</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<div id='p1'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 1</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<button type="button" onclick="var x = getFirstProduct(); alert(x);">Get First Product</button>
<button type="button" onclick="var x = getSecondProduct(); alert(x);">Get Second Product</button>
<script>
function getFirstProduct() {
return $("#p0 span.pn").next().text();
}
function getSecondProduct() {
return $("#p1 span.pn").next().text();
}
</script>
更新1
根据给出的答案和重复标记为的帖子,我想出了以下代码,它非常有效。解决方案的演示代码位于以下URL:解决方案代码演示。
其思想是获取类为pn
的span的父div,然后只获取其下的所有类型的节点,即只从父div向下一级,这是通过contents()
方法完成的(而不是children()
方法,因为子节点将忽略文本节点)。这将给我们两个元素-span和span元素后面的文本,因为这两个元素是父div的唯一immediate
子元素。文本节点将是我们正在寻找的产品的名称。
在jquery中查找文本节点时,似乎总是需要contents()
方法
有效的代码
<div id='p0'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 0</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<div id='p1'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 1</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<button type="button" onclick="var x = getFirstProduct(); alert(x);">Get First Product</button>
<button type="button" onclick="var x = getSecondProduct(); alert(x);">Get Second Product</button>
<script>
function getFirstProduct() {
return $("#p0 span.pn").parent().contents().filter(function(index) { return this.nodeType === 3 ;}).text();
}
function getSecondProduct() {
return $("#p1 span.pn").parent().contents().filter(function(index) { return this.nodeType === 3 ;}).text();
}
</script>
$(function() {
$('#out0').on('click', function(e) {
getFirstProduct();
});
$('#out1').click(function(e) {
getSecondProduct();
});
function getFirstProduct() {
$("#p0 span.pn").text('');
var txt0 = $("#p0 span.pn").parent().text();
$('#out0').text(txt0);
}
function getSecondProduct() {
$('#p1 span.pn').text('');
var txt1 = $("#p1 span.pn").parent().text();
$('#out1').text(txt1);
}
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id='p0'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 0</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<div id='p1'>
<div>some content</div>
<div></div>
<div><span class='t pn'>Product : </span>Product 1</div>
<div></div>
<div>some content</div>
<div>some content</div>
</div>
<button id="out0">Get First Product</button>
<button id="out1">Get Second Product</button>
相关文章:
- GTM每隔5秒在页面上查找文本
- Javascript文本框-查找最低的输入和填充
- 查找已提交的文本区域数
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- 从页面中查找长度为4的文本
- 原型JS查找跨度并替换文本
- jQuery在iFrame Src中查找和替换文本
- 在UIWebView中查找并突出显示带变音符号的阿拉伯语文本
- 正在查找最后一次出现的文本
- 使用 Selenium 在 IE9 浏览器中查找 PDF 文本
- 在其他网站上查找/着色/标记文本
- 单击已连接的可排序项时查找列表文本
- 在td旁边的HTML表中查找td文本
- JQuery 按文本查找 LI,按类查找 UL
- 根据文本查找数组中的项
- 如何避免/跳过CKEDITOR 4.0中隐藏/未显示内容中的文本查找
- 如何根据文本查找HTML元素,然后分配ID
- 使用jquery通过文本查找TH对象(表头),而无需遍历表的所有TH's
- 通过a列中包含的文本查找表的第一行,并选择同一行中的B列
- 如何使用量角器按文本查找和单击表元素