Я читаю элементы на странице (всех видов) с помощью JavaScript и, при необходимости, изменяя их. Когда я изменяю один из элементов, я хочу оставить маркер, чтобы сказать, что я его модифицировал. Затем я могу прочитать элементы на странице, и если я найду этот маркер, я знаю, что это один из элементов, которые я модифицировал и могу его восстановить. Вот код, который работает для меня, но это было предложено, я должен использовать SetAttribute и GetAttribute, а не то, что я делаю:Должен ли я использовать setAttribute для добавления свойств к элементу?
//hide some elements, after first leaving a marker and saving orig. val
for(var i=0; i<elements.length; i++) {
if(should_i_hide_this_element(elements[i])) { //external logic unimportant
elements[i].wasModifiedByMe = true; //mark element as modified
elements[i].origViz = elements[i].style.visibility; //save visibility val
elements[i].style.visibility = "hidden"; //and give it a new val
}
}
Соответствующий код для восстановления значений элементов, как это:
for(var i=0; i<elements.length; i++) {
if(elements[i].wasModifiedByMe) { //This is one I modified
elements[i].style.visibility = elements[i].origViz; //restore original val
elements[i].wasModifiedByMe = false; //mark as not modified now
}
}
Вопрос в том, должен ли я использовать setAttribute и getAttribute для моего beModifiedByMe boolean и моих свойств origViz? В настоящее время я не верю, что мне нужно использовать функции атрибута для моих собственных добавленных свойств.
После обсуждения нити ниже, я попробовал этот тест:
<!doctype html>
<html>
<body>
<div id="mydiv">DIV</div>
<script>
var elem = document.getElementById("mydiv");
elem.secretproperty = "not_seen_in_elements_tab_in_chrome_dev_tools";
elem.setAttribute("publicproperty","is_visible_in_elements_tab");
</script>
</body>
</html>
и на вкладке элементов в хром Дев инструментов, я увидел, что mydiv показывал, что атрибут, как общественная собственность части дел. Однако он не показывал секретную собственность.
Это как я и думал. Использование setAttribute устанавливает атрибут HTML, который также отражается в объекте javascript, но если НЕ использовать setAttribute и добавить свойство к объекту-хозяину javascript, отражение не идет другим путем (TO атрибутов HTML). Это то, чего я хочу. Я не хочу, чтобы каждый элемент, который я скрыл, неожиданно отображает атрибут isHiddenByMe = "true" (хотя в этом есть заслуга, я вижу это).
Мой совет - использовать классы для этого и писать CSS на основе класса.Наличие класса говорит вам, было ли оно изменено вами. – kapa
Хорошее предложение, но классы в этом случае не подходят. Мой код может быть добавлен на ЛЮБОЙ странице и скроет некоторые элементы при их запросе и восстановит их позже. – Dee2000
Вы все еще можете использовать классы, но тогда вы можете сохранить 'style.visibility'. – kapa