Выбор элемента по атрибуту данных

Я столкнулся с той же проблемой и на основе guya answer Я расширил библиотеку подчёркивания, а также добавил немного больше функциональности, которую я требовал. Вот Gist .

/**
 * Merges two object-like arrays based on a key property and also merges its array-like attributes specified in objectPropertiesToMerge.
 * It also removes falsy values after merging object properties.
 *
 * @param firstArray The original object-like array.
 * @param secondArray An object-like array to add to the firstArray.
 * @param keyProperty The object property that will be used to check if objects from different arrays are the same or not.
 * @param objectPropertiesToMerge The list of object properties that you want to merge. It all must be arrays.
 * @returns The updated original array.
 */
function merge(firstArray, secondArray, keyProperty, objectPropertiesToMerge) {

    function mergeObjectProperties(object, otherObject, objectPropertiesToMerge) {
        _.each(objectPropertiesToMerge, function (eachProperty) {
            object[eachProperty] = _.chain(object[eachProperty]).union(otherObject[eachProperty]).compact().value();
        });
    }

    if (firstArray.length === 0) {
        _.each(secondArray, function (each) {
            firstArray.push(each);
        });
    } else {
        _.each(secondArray, function (itemFromSecond) {
            var itemFromFirst = _.find(firstArray, function (item) {
                return item[keyProperty] === itemFromSecond[keyProperty];
            });

            if (itemFromFirst) {
                mergeObjectProperties(itemFromFirst, itemFromSecond, objectPropertiesToMerge);
            } else {
                firstArray.push(itemFromSecond);
            }
    });
    }

    return firstArray;
}

_.mixin({
            merge: merge
        });

Надеюсь, это будет полезно! Привет!

938
задан Arslan Ali 4 February 2016 в 12:47
поделиться

1 ответ

$('*[data-customerID="22"]');

Вы должны иметь возможность опустить * , но, если я правильно помню, в зависимости от того, какую версию jQuery вы используете, это может дать ошибочные результаты.

Обратите внимание, что для совместимости с API селекторов ( document.querySelector {, all} ) кавычки вокруг значения атрибута ( 22 ) не могут быть опущены в этот случай .

Кроме того, если вы много работаете с атрибутами данных в сценариях jQuery, вы можете рассмотреть возможность использования плагина пользовательских атрибутов данных HTML5 . Это позволяет вам писать еще более читаемый код, используя .dataAttr ('foo') , и приводит к уменьшению размера файла после минификации (по сравнению с использованием .attr ('data-foo') ).

1422
ответ дан 19 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: