Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2020, 07:53
Аспирант
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 98

Заменить getElementById на getElementsByClassName
Приветствую! Подскажите как правильно заменить getElementById на getElementsByClassName в нижеуказанном скрипте. Это скрипт GDPR Cookie, который имеет 2 кнопки (1-принять и 2-закрыть). Они обе должны срабатывать одинаково, однако, мы знаем, что не бывает одинаковый ID у двух элементов на странице, поэтому хотелось бы заменить id на class.
(function(){
	"use strict";

	window.FS = window.FS || {}; 
	window.FS.GDPR = window.FS.GDPR || {};

	//setup hook for when accept is clicked
	var onAcceptCbs = []; 
	window.FS.GDPR.onAccept = function(cb){
		onAcceptCbs.push(cb);
	};

	//get the banner
	var banner = document.getElementById('GdprCookieBanner');
	var acceptButton = document.getElementById('GdprCookieBannerAccept');
	acceptButton.onclick = function(event){
		//save the acceptance cookie
		var d = new Date();
		d.setTime(d.getTime() + (365*24*60*60*1000));
		
		//figure out the domain
		var cookieDomain = window.location.hostname;
		var domainParts = cookieDomain.split('.');
		var firstPart = domainParts[0];

		if( !isNumeric(firstPart)  &&  (cookieDomain.indexOf("local")<0)  &&  (domainParts.length > 1) ){
			cookieDomain = '.' + domainParts.slice(domainParts.length -2).join('.');
		}

		//actually save the cookie value
		document.cookie = 'gdprAccepted=true;path=/;expires=' + d.toUTCString() + ';domain='+cookieDomain;
		banner.style.display = "none";

		//trigger any callbacks that have registered for when accept is clicked
		onAcceptCbs.forEach(function(cb){
			cb(); 
		});

		//mark that it's been accepted
		window.FS.GDPR.accepted = true; 
		
		//stops the click
		return false;
	};

	if(document.cookie.indexOf('gdprAccepted=true') < 0){
		//cookie not found. show banner
		banner.style.display = "block";

		//mark that we don't have acceptance
		window.FS.GDPR.accepted = false; 
	}else{
		//mark that 
		window.FS.GDPR.accepted = true; 
	}

	function isNumeric(item){
		return !isNaN(parseFloat(item)) && isFinite(item);
	}

})();

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2020, 09:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от samdo
как правильно заменить getElementById на getElementsByClassName
Результат, возвращаемый getElementsByClassName(), является коллекцией. Если у тебя два элемента с нужным классом, к ним можно обращаться в цикле или вот так
<button class='test'>Item</button>
<button class='test'>Item</button>
<script>
var o=document.getElementsByClassName('test');
o[0].innerHTML='Item 0';
o[1].innerHTML='Item 1';
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2020, 22:23
Аспирант
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 98

Можно попросить связать это с кодом, который указан в первом посте? А то не понятно что там на что заменить.

Последний раз редактировалось samdo, 14.03.2020 в 11:11.
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2020, 11:11
Аспирант
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 98

Please
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2020, 11:36
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Можно не менять на на getElementsByClassName

(function(){
	"use strict";

	window.FS = window.FS || {}; 
	window.FS.GDPR = window.FS.GDPR || {};

	//setup hook for when accept is clicked
	var onAcceptCbs = []; 
	window.FS.GDPR.onAccept = function(cb){
		onAcceptCbs.push(cb);
	};

     const handler = function(event){
		//save the acceptance cookie
		var d = new Date();
		d.setTime(d.getTime() + (365*24*60*60*1000));
		
		//figure out the domain
		var cookieDomain = window.location.hostname;
		var domainParts = cookieDomain.split('.');
		var firstPart = domainParts[0];

		if( !isNumeric(firstPart)  &&  (cookieDomain.indexOf("local")<0)  &&  (domainParts.length > 1) ){
			cookieDomain = '.' + domainParts.slice(domainParts.length -2).join('.');
		}

		//actually save the cookie value
		document.cookie = 'gdprAccepted=true;path=/;expires=' + d.toUTCString() + ';domain='+cookieDomain;
		banner.style.display = "none";

		//trigger any callbacks that have registered for when accept is clicked
		onAcceptCbs.forEach(function(cb){
			cb(); 
		});

		//mark that it's been accepted
		window.FS.GDPR.accepted = true; 
		
		//stops the click
		return false;
	};

	//get the banner
	var banner = document.getElementById('GdprCookieBanner');
	var acceptButton = document.getElementById('GdprCookieBannerAccept');

	acceptButton.onclick = handler;
    baner.onclick = handler;

	if(document.cookie.indexOf('gdprAccepted=true') < 0){
		//cookie not found. show banner
		banner.style.display = "block";

		//mark that we don't have acceptance
		window.FS.GDPR.accepted = false; 
	}else{
		//mark that 
		window.FS.GDPR.accepted = true; 
	}

	function isNumeric(item){
		return !isNaN(parseFloat(item)) && isFinite(item);
	}

})();
Ответить с цитированием
  #6 (permalink)  
Старый 15.03.2020, 20:20
Аспирант
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 98

Спасибо! Но cookies теперь не запоминаются( после перезагрузки страницы опять сообщение о cookies отображается.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить цепочку кода в DOM другой строкой? SashaFlowSet Events/DOM/Window 2 11.03.2015 10:47
Таймер обратного отсчета времени с кнопками denisich84 Общие вопросы Javascript 31 20.01.2015 17:48
Как заменить null на текст? FredIkO Общие вопросы Javascript 2 07.01.2014 21:55
Заменить запятую на точку snake Javascript под браузер 2 27.12.2013 10:54
Как правильно заменить подстроку. Ogara Общие вопросы Javascript 3 13.07.2012 03:12