jQuery如果div id包含数组中的数字...做一些事情

时间:2018-03-13 09:38:10

标签: javascript jquery

我有一组数字,我需要在这样的网页上定位:

sku = [1243,3453,6453, ..... ]

这些值位于页面上的div内:

  <div id="product_1243">
<div class="block">
test
</div>
 </div>

 <div id="product_3453"> 
<div class="block">
test
</div>
</div>

 <div id="product_6453">
<div class="block">
test
</div>
 </div>

我创建了一个函数来检查此div中是否存在数组中的数字:

     sku.forEach(function (element) {
            if ($("div[id*='product_item_code_" + element +"']").length) {
                alert("this exists" + element);
            }
        }); 

这有效,但我想问两个问题:

1)如何使用insertAfter在每个<div class="block">之后插入一些HTML。如果声明当然是真的,它应该只被插入。

 $("<p>test!</p>").insertAfter(....);

2)如果这对性能最佳,因为我的数组实际上要大得多,要在forEach中检查超过1000个值。

由于

2 个答案:

答案 0 :(得分:0)

如果appendappendTo

的唯一孩子,请使用blockproduct_***
var $el = $("div[id*='product_item_code_" + element +"']");
if ( $el.length) {
    alert("this exists" + element);
    $("<p>test!</p>").appendTo( $el );
}

var $el = $("div[id*='product_item_code_" + element +"']");
if ( $el.length) {
    alert("this exists" + element);
    $el.append( "<p>test!</p>" )
}

如果block不是唯一的孩子

var $el = $("div[id*='product_item_code_" + element +"']");
if ( $el.length) {
    alert("this exists" + element);
    $("<p>test!</p>").insertAfter( $el.find( ".block" ) );
}

答案 1 :(得分:0)

这个怎么样?存储products,而不是每次都会查询它,因为它会影响性能。

const products = $('div[id^=product_item_code]')
products.each((index, element) => {
    if(sku.includes(element.id.split('_')[1]))
        $('.block', element).after('<p>test!</p>')
})