使用 jQuery 选择元素的一部分?
Selecting parts of an element with jQuery?
我有以下 HTML:
<div id="foo">
<span>
<a href="#" class="no-want">X</a>
1
</span>
<span>
<a href="#" class="no-want">X</a>
2
</span>
<span>
<a href="#" class="no-want">X</a>
Hello
</span>
</div>
我想使用jQuery在JS中只得到以下1
、2
和hello
(这意味着没有<a>
标签或
).请注意 我不想影响 DOM 本身 。我只想检索对象(如数组)中的文本。
这是我目前拥有的:
$('#foo span');
但是我似乎无法删除 "a" 标签。
以下似乎也不起作用:
$('#foo span').remove('a');
我也知道 .remove()
会影响 DOM 它自身,而不仅仅是检索文本。
尝试使用 RegEx 来匹配您想要的内容
$('#foo span').each(function () {
alert($(this).html().match(/[0-9]/));
});
解决方案通过遍历每个子项并克隆它来进行操作来创建数组,因此 dom 保持完整
var values = $('#foo').children().map(function () {
var $clone = $(this).clone();
$clone.children().remove();
return $.trim($clone.text());
}).get();
console.log(values) /// ["1","2","Hello"]
这段代码将为您获取该值:
$('#foo span').each(function(){
console.log($.trim($(this).html().substring($(this).html().lastIndexOf(" ") + 6)));
});
工作 jsFiddle:
http://jsfiddle.net/mrwqs2nb/1/
打开控制台,你会看到:
1
2
Hello
由于你的问题不详细,根据你的要求,可以按如下方式进行
var res=[];
$('#foo span').map(function(i){
var htm=$(this).text();
var htm_d=$(this).find('a').html();
htm=$.trim(htm.split("").reverse().join(""));
htm_d=$.trim(htm_d.split("").reverse().join(""));
res[i] = htm.substring(0,htm_d.length);
} );
alert(res);
不知道这个游戏的规则是什么,但是如果可以假设你想要的是在
的右边,那么应该这样做:
$('#foo span').map(function() {
//Split at the space.
var parts = $(this).html().split(' ');
//Remove the first element from the list.
parts.shift();
//Join and return.
return parts.join('');
}).get();
尝试使用选择器 $("foo span")
、 $.map()
、 String.prototype.match()
和 RegExp
[0-9]+|[a-z]+[^\s+|\n+|" + el.querySelector(".no-want").textContent + "]", "ig"
来匹配数字或字符 a-z
不区分大小写,取反space 字符,或换行符,或 ".no-want"
元素 .textContent
at index
of parent span
element
var res = $.map($("#foo span"), function(el, index) {
return el.textContent.match(new RegExp("[0-9]+|[a-z]+[^\s+|\n+|"
+ el.querySelector(".no-want").textContent.trim() + "]", "ig"))
});
console.log(res)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="foo">
<span>
<a href="#" class="no-want">X</a>
1
</span>
<span>
<a href="#" class="no-want">X</a>
2
</span>
<span>
<a href="#" class="no-want">X</a>
Hello
</span>
</div>
使用 jquery 的 contents - api 页面有一个关于如何在忽略其他元素的同时增加文本节点的示例。
var result = $("#foo span")
.contents()
.filter(function() {
// #text nodes
return this.nodeType === 3;
}).map(function() {
// get the value and trim it (also removes  )
return $(this).text().trim();
}).filter(function() {
// remove blanks
return this != "";
}).toArray();
$("#result").text(result.join());
工作fiddle
我有以下 HTML:
<div id="foo">
<span>
<a href="#" class="no-want">X</a>
1
</span>
<span>
<a href="#" class="no-want">X</a>
2
</span>
<span>
<a href="#" class="no-want">X</a>
Hello
</span>
</div>
我想使用jQuery在JS中只得到以下1
、2
和hello
(这意味着没有<a>
标签或
).请注意 我不想影响 DOM 本身 。我只想检索对象(如数组)中的文本。
这是我目前拥有的:
$('#foo span');
但是我似乎无法删除 "a" 标签。
以下似乎也不起作用:
$('#foo span').remove('a');
我也知道 .remove()
会影响 DOM 它自身,而不仅仅是检索文本。
尝试使用 RegEx 来匹配您想要的内容
$('#foo span').each(function () {
alert($(this).html().match(/[0-9]/));
});
解决方案通过遍历每个子项并克隆它来进行操作来创建数组,因此 dom 保持完整
var values = $('#foo').children().map(function () {
var $clone = $(this).clone();
$clone.children().remove();
return $.trim($clone.text());
}).get();
console.log(values) /// ["1","2","Hello"]
这段代码将为您获取该值:
$('#foo span').each(function(){
console.log($.trim($(this).html().substring($(this).html().lastIndexOf(" ") + 6)));
});
工作 jsFiddle: http://jsfiddle.net/mrwqs2nb/1/
打开控制台,你会看到:
1
2
Hello
由于你的问题不详细,根据你的要求,可以按如下方式进行
var res=[];
$('#foo span').map(function(i){
var htm=$(this).text();
var htm_d=$(this).find('a').html();
htm=$.trim(htm.split("").reverse().join(""));
htm_d=$.trim(htm_d.split("").reverse().join(""));
res[i] = htm.substring(0,htm_d.length);
} );
alert(res);
不知道这个游戏的规则是什么,但是如果可以假设你想要的是在
的右边,那么应该这样做:
$('#foo span').map(function() {
//Split at the space.
var parts = $(this).html().split(' ');
//Remove the first element from the list.
parts.shift();
//Join and return.
return parts.join('');
}).get();
尝试使用选择器 $("foo span")
、 $.map()
、 String.prototype.match()
和 RegExp
[0-9]+|[a-z]+[^\s+|\n+|" + el.querySelector(".no-want").textContent + "]", "ig"
来匹配数字或字符 a-z
不区分大小写,取反space 字符,或换行符,或 ".no-want"
元素 .textContent
at index
of parent span
element
var res = $.map($("#foo span"), function(el, index) {
return el.textContent.match(new RegExp("[0-9]+|[a-z]+[^\s+|\n+|"
+ el.querySelector(".no-want").textContent.trim() + "]", "ig"))
});
console.log(res)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="foo">
<span>
<a href="#" class="no-want">X</a>
1
</span>
<span>
<a href="#" class="no-want">X</a>
2
</span>
<span>
<a href="#" class="no-want">X</a>
Hello
</span>
</div>
使用 jquery 的 contents - api 页面有一个关于如何在忽略其他元素的同时增加文本节点的示例。
var result = $("#foo span")
.contents()
.filter(function() {
// #text nodes
return this.nodeType === 3;
}).map(function() {
// get the value and trim it (also removes  )
return $(this).text().trim();
}).filter(function() {
// remove blanks
return this != "";
}).toArray();
$("#result").text(result.join());
工作fiddle