2014-06-05 3 views
4

У меня есть div, где динамические атрибуты данных добавляются к некоторым тегам. (имя данных- атрибутов генерируется динамически скриптом, так что нет никакого способа, мой скрипт будет знать имя-данных атрибута)Удаление всех динамических «атрибутов данных» элемента

<div data-1223="some data" data-209329="some data" data-dog="some value"> </div> 

Теперь я хочу, чтобы написать код, в котором она сбрасывает div, удалив все атрибуты данных и их значения.

я могу использовать

$('div').attr('data-209329',"") 

, но проблема в том, я не знаю, имя-данных атрибута, который будет добавлен. атрибут данных, который будет добавлен, является динамическим, и я не контролирую его.

удаление div и reinserting div не является вариантом. Помощь Pls. заранее спасибо

+0

Есть функция, чтобы удалить атрибут в jQuery: http://api.jquery.com/removeattr/, это более чистое, что "" – Superdrac

+0

Вы пытались использовать .removeAttr() – Pranav

+0

@Pranav Я думаю, он хочет удалить все ' data-', и он не знает всех имен. – Epsil0neR

ответ

7

Вы можете использовать как этот

var data = $("div").data(); 

var keys = $.map(data, function (value, key) { 
    return key; 
}); 
for (i = 0; i < keys.length; i++) { 
    $("div").removeAttr("data-" + keys[i]); 
} 

Fiddle

Edit

Предложил @Mottie

$.each($('div').data(), function (i) { 
    $("div").removeAttr("data-" + i); 
}); 

Demo

+1

+1 Я не уверен, кто сбил, но этот метод работает. – Mottie

+1

Downvoter, пожалуйста, прокомментируйте .. –

+0

@AnoopJoshi ваше решение любит мое, но я не знаю, какие решения downvote ... –

2

Вы можете использовать этот код:

var data = $('div').data(); 

for(var i in data){ 
    //for change 
    $('div').attr("data-"+i,"something"); 
    //for remove 
    $("div").removeAttr("data-" + i); 
} 

$('div').data(); подготовить список всех атрибутов данных в var data переменной. Тогда вы можете работать с ним. Это fiddle of this solution.

UPDATE Предложил @Mottie

$.each($('div').data(), function (i) { 
     //for change 
     $('div').attr("data-"+i,"something"); 
     //for remove 
     $("div").removeAttr("data-" + i); 
    }); 
+0

Downvoter, пожалуйста, порекомендуйте ... –

+0

Ваш код работает, но он не проголосовал так сильно, потому что вы используете цикл 'for ... in', который [не всегда идеален] (http: // stackoverflow .com/questions/500504/why-is-use-for-in-with-array-iteration-such-the-bad-idea) – Mottie

0

Я думаю, что функция removeData() является то, что вы ищете здесь. Это приведет к удалению всей информации, хранящейся на элементе, data.

Метод .removeData() позволяет нам удалить значения, которые были предварительно установлены с использованием .data(). Когда вызывается с именем ключа, .removeData() удаляет это конкретное значение; При вызове без аргументов все значения удаляются. Удаление данных из внутреннего кеша .data() jQuery не влияет на атрибуты данных HTML5 в документе; используйте .removeAttr(), чтобы удалить их.

Однако он не удалит фактические атрибуты из элементов. Чтобы удалить фактические атрибуты, вам нужно извлечь список существующих атрибутов. Вы можете сделать это, проверив функцию data() элемента (перед запуском removeData).

Функция data() возвращает объект из key => value пар, который затем можно использовать для удаления фактических атрибутов из элемента с помощью removeAttr().

+0

Атрибут data - динамический .... так что я не смогу удалить это до и до тех пор, пока у меня не будет имени атрибута. SO, removeData() не будет работать, поскольку он принимает NAME атрибута данных, подлежащего удалению. – Prashant

+0

@Prashant - да. И вы можете извлечь значения, используя функцию 'data()'. – Lix

Смежные вопросы