$ .each函数来获取所有跨度数据

时间:2014-12-15 10:40:42

标签: jquery

我正在尝试从此html部分获取所有数据名称属性

<div class='get-all'>
    <div class='left-wrapper'>
        <div class='field-wrapper'>
            <div class='field'> <span class='product-id' data-name='itemId'>5</span>

                <img src='carousel/images/120231671_1GG.jpg' width='52' height='52'> <span class='final-descript' data-name='itemDescription'>Product 1</span>
 <span class='product-id' data-name='itemAmount'>225,99</span>
 <span class='product-id' data-name='itemQuantity'>1</span> 
            </div>
            <div class='fix'></div>
            <div class='field'> <span class='review-price'>$ &nbsp;225,99</span>

            </div>
        </div>
        <div class='field-wrapper'>
            <div class='field'> <span class='product-id' data-name='itemId'>4</span>

                <img src='carousel/images/120231671_1GG.jpg' width='52' height='52'> <span class='final-descript' data-name='itemDescription'>Product 2</span>
 <span class='product-id' data-name='itemAmount'>699,80</span>
 <span class='product-id' data-name='itemQuantity'>1</span> 
            </div>
            <div class='fix'></div>
            <div class='field'> <span class='review-price'>$ &nbsp;699,80</span>

            </div>
        </div>
    </div>
    <div class='left-wrapper'> <span class='f-itens'>Total</span><span id='fff' class='f-value'>925,79</span>

        <hr class='f-hr' /> <span class='f-itens'>Shipping</span><span class='f-value' id='f-value'> - </span>

        <hr class='f-hr' />
        <div class='f-itens tots'>Total Price</div><span class='f-value' id='pagar'>-</span>

    </div>
</div>

我正在使用这个javascript

$(".get-all").each(function(index, element){
        $('[data-name]').each(function(index, element) {
            if($(this).attr("data-name")) {
                if (startsWith($(this).attr("data-name"),"itemAmount")) {
                    var a = $(this).html()
                    var b = a.replace(".", "");
                    var c = b.replace(",", ".");

                    params[$(this).attr("data-name") + (index+1)] = c;


                } else {
                    params[$(this).attr("data-name") + (index+1)] = $(this).html();
                }
            }
        });
    });

但我只得到第一个数据名称span atributes,比如

ItemId = 5
ItemDescription = Product 1
ItemAmount 225,99
ItemQuantity = 1

如何在此跨度内获取所有属性名称?感谢所有回复。

2 个答案:

答案 0 :(得分:1)

您可以使用$.map$.get,并且只能直接捕获data-name的跨度,从而避免额外的if条件。

params = $(element).find("span[data-name]").map(function() {
    return $(this).data("name");
}).get();

根据你的评论,我想你想要,(但不知道为什么)

params = $(element).find("span[data-name]").map(function() {
    var rtn = $(this).data("name");
    return rtn.replace((rtn == 'itemAmount') ? "." : ","), "");
}).get();

答案 1 :(得分:1)

一个简单的

$('[data-name]').each(function(index, elem) {
    // do things with index and elem
    $(elem); // Will be your span 
});

将为您提供具有data-name属性的所有元素。