替代jQuery each() - 自学问题

时间:2011-08-31 15:11:36

标签: jquery arrays jquery-selectors

看着这个

get value of inside a tag with jQuery.?

<span>
 <b>hi_1</b>
 <b>hi_2</b>
 <b>hi_3</b>
 <b>hi_4</b>
<span>

其中的问题是获取标记内容的逗号分隔字符串

解决方案是推动每个解决方案。

是否有更短(可能更快)的方式使用例如

$("span b").text().join(",")当然不起作用,因为text()不返回数组......

更新:

artyom发布的“错误报告”(功能请求)有这个相当有趣的片段

var x = $("span b").map(function() {
  return $(this).text();
}).toArray().join(", "); 

类似于BrokenGlass的解决方案,但更短......

http://jsfiddle.net/mplungjan/M42Qx/

我更喜欢toArray one ...

4 个答案:

答案 0 :(得分:3)

这可能是作弊,但由于<b>标记之外没有任何文字,您只需使用$('span').text()抓取<span>的内部文字并使用相反......

$.trim($('span').text()) // Trim newlines near <span> and </span> tags
 .replace(/\s+/g, ', '); // Replace all other whitespace between <b></b> with ,

答案 1 :(得分:1)

您可以使用map(),但我怀疑这会更快,因为您必须从jQuery对象转换为数组并返回到jQuery对象:

var results = $("b").get()
                    .map(function(e) { return $(e).text();})
                    .join(",");
alert(results);

jsFiddle link

答案 2 :(得分:1)

有一个bug report关于向text()方法添加此功能的问题,在提供了几种方法后,该方法已使用 worksforme 解决方案关闭。

答案 3 :(得分:0)

我想到的唯一选择是使用filter()

,而不是@BoltClock的替代选择。
var values = [];
$('b').filter(
    function(){
        return values.push($(this).text());
    });
alert(values);

JS Fiddle demo

这与使用each()的解决方案没有多大区别,因为它或多或少地做同样的事情。