$('.quantity_inner .bt_minus').click(function() {
let $input = $(this).parent().find('.quantity');
let $val = $('.knopka1');
let count = parseInt($input.val()) - 1;
count = count < 1 ? 1 : count;
let price_val = parseFloat($val.data('price'));
let curr_val = count * price_val;
$input.val(count);
$val.text(curr_val);
});
<td class="local_time0" data-tz="Europe/Saratov">Thu, 29 Apr 2021 09:50:04 +0400</td>
function t() {
try {
if (!i)
return !0;
for (var t, e = new Date, a = ".local_time", n = [], r = [], o = 0; o < 2; o++)
n[o] && r[o] || (n[o] = $(a + o).data("tz"),
r[o] = $(a + o).text().substr(25)),
t = Intl.DateTimeFormat("en-GB", {
weekday: "short",
day: "2-digit",
month: "short",
year: "numeric",
hour: "numeric",
minute: "numeric",
second: "numeric",
timeZone: n[o]
}).format(e),
$(a + o).text(t.slice(0, 16) + t.slice(17) + r[o]);
return !0
} catch (t) {
return !1
}
}
t() && window.setInterval(t, 1e3)
{"2019-12-22":[{"dt":1577048400,"main":{"temp":-21.94,"feels_like":-26.97,"temp_min":-22.46,"temp_max":-21.94,"pressure":1018,"sea_level":1018,"grnd_level":1013,"humidity":99,"temp_kf":0.52},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"clouds":{"all":34},"wind":{"speed":1.97,"deg":139},"sys":{"pod":"n"},"dt_txt":"2019-12-22 21:00:00"}],
...}
let wd = {};
data.list.map(e => {
let dt = e.dt_txt.split(" ")[0];
if(typeof(wd[dt])!="undefined") {
wd[dt].push(e);
} else {
wd[dt] = [];
}
});
console.log(JSON.stringify(wd));
let iconUrl="";
let wdate = ""; // переменная состояния
function forecastTemplate (localData) {
let s = "";
if (localData.dt_txt.split(" ")[0] != wdate) {
wdate = localData.dt_txt.split(" ")[0];
s += `
<tr><td colspan=2>${wdate}</td>
`;
}
s += `
<tr>
<td>
<div class="flex">
<div>
<span>${localData.dt_txt.split(" ")[1]}<span>
</div>
<div>
<img src="${iconUrl}${localData.weather[0].icon}@2x.png">
</div>
</div>
</td>
<td>
<div class="flex">
<div>
<span class="temp">${localData.main.temp}℃</span>
</div>
<div>
<span class="description">${localData.weather[0].description}</span>
</div>
</div>
<div class="flex">
<div>
<span>wind: ${localData.wind.speed} m/s,</span>
</div>
<div>
<span>clouds: ${localData.clouds.all}%,</span>
</div>
<div>
<span>pressure: ${localData.main.pressure} hPa</span>
</div>
</div>
</td>
</tr>`
return s
}
let html = "";
document.body.innerHTML = `<table>${data.list.map(forecastTemplate).join("")}</table>`;
Можно ли дойдя с помощью цикла до свойства hosts понять, что оно является объектом?
console.log(typeof({}));
// object
for (var key in data) {
if(typeof(data[key]) == "object") {
console.log (key + " is object");
}
}
Просто мне необходимо в этом случае, добавлять в тело цикла(или условия) после самого объекта(в данном случае data), или .объект или [свойство].
Кстати, с помощью какого метода, я смогу это всё добавлять? Мне нужно добавить либо data.hosts либо data[свойство]
data["hosts"][2] = {name: 'web3'}
data["hosts"][data["hosts"].length] = {name: 'web3'}
// или
data["hosts"].push( {name: 'web3'} );
const data = {
user: 'ubuntu',
hosts: {
0: {
name: 'web1',
},
1: {
name: 'web2',
null: 3,
},
},
};
// классически на if
function getIn(obj, parr) {
if(typeof(obj[parr[0]]) == "undefined") {
return null;
} else {
if(typeof(obj[parr[0]]) == "object") {
if(parr.length > 1) {
return getIn(obj[parr[0]], parr.slice(1))
} else {
return obj[parr[0]]
}
} else {
return obj[parr[0]];
}
}
}
// защита от дурака (когда некорректные параметры) + switch case
function getIn(obj, parr) {
if (
typeof(obj) != "object" ||
typeof(parr) != "object" ||
parr.length == "undefined" ||
parr.length == 0
) return null;
switch (typeof(obj[parr[0]])) {
case "undefined":
return null;
case "object":
return (parr.length > 1)? getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]]
default:
return obj[parr[0]];
}
}
// еще короче
function getIn(obj, parr){
return !(
typeof(obj) != "object" ||
typeof(parr) != "object" ||
parr.length == "undefined" ||
parr.length == 0
)?
typeof(obj[parr[0]]) == "object" ?
(parr.length > 1)?
getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]] :
obj[parr[0]] ?
obj[parr[0]]: null:
null
}
// и стрелочной функцией
const getIn = (obj, parr) => !(
typeof(obj) != "object" ||
typeof(parr) != "object" ||
parr.length == "undefined" ||
parr.length == 0
)?
typeof(obj[parr[0]]) == "object" ?
(parr.length > 1)? getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]] :
obj[parr[0]] ? obj[parr[0]]:null :
null;
function getIn(obj, parr) {
let o = obj;
for(let i=0; i< parr.length; i++) {
o = o[parr[i]];
if(typeof(o)=="undefined") return null;
}
return o;
}
$('.popup-button').on('click', function () {
$('.popup-thanks').fadeIn(),
$('.popup-callback').fadeOut();
});
$('.popup-thanks').fadeIn(),
$('.popup-callback').fadeOut();
$('.popup-button').on('click', function () {
if (
// проверка заполнения имени
$(".popup-input-name").val().length > 1 &&
// проверка корректного заполнения телефона
/^\+?7[ -]?\(?\d{3}\)?[ -]?\d{3}[ -]?\d{2}[ -]?\d{2}$/.test( $(".popup-input-phone").val() ) &&
// проверка корректного заполнения e-mail
/^[a-z0-9\-\.]+@[a-z0-9\-\.]+\.[a-z]+$/i.test( $(".popup-input-mail").val() )
) {
$('.popup-thanks').fadeIn(),
$('.popup-callback').fadeOut();
} else {
alert ("Просьба корректно заполнить поля формы");
}
});
$(".string_block:not(.row):nth-child(2n)").wrapAll("<div class='row' />");
$(".string_block:not(.row):nth-child(even)").wrapAll("<div class='row' />");
quant: Number($(el).find('.cart-popup__calcdisp').find('span').text().replace(/[\s\n\t]/mg, "").replace(/,/mg, ".")),
let priceOfOne = $(el).find('.cart-popup__nums_one').find('span').text().replace(/[\s\n\t]/mg, "").replace(/,/mg, "."),
num = priceOfOne.toLowerCase().indexOf('руб'),
const al = "АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯ "; // Алфавит
let key1 = "ПЕРВЫЙ"; // первый ключ
let key2 = "БУКВА"; // второй ключ
let open_str = "ЭТО СТРОКА ОТКРЫТОГО ИСХОДНОГО ТЕКСТА"; // кодируемый текст
// т.к. в алфавите нет букв Й и Ъ, то производим соответствующую замену:
key1 = key1.replace("Й","И").replace("Ъ","Ь");
key2 = key2.replace("Й","И").replace("Ъ","Ь");
open_str = open_str.replace("Й","И").replace("Ъ","Ь");
// кодируем текст
let encoded_str = ([...open_str]).map( (e,i) => al[(al.indexOf(e) + al.indexOf(key1[i%key1.length]) + al.indexOf(key2[i%key2.length])) % 32] ).join("");
console.log(encoded_str);
var str = '90553334849';
alert(/^\+?9[ -]?\(?05[58]\)?[ -]?\d{3}[ -]?\d{2}[ -]?\d{2}$/.test(str));
var str = '9(055)3334849';
var allow = ['055','058'];
alert((new RegExp('^\\+?9[ -]?\\(?('+allow.join('|')+')\\)?[ -]?\\d{3}[ -]?\\d{2}[ -]?\\d{2}$')).test(str));
и как сравнить значение, если например 0 - соотв. этому .item добавляем класс
0: 1, 1: 4, 2: 2, 3: 4, 4: 4, 5: 2,
str.split(', ')[i]
значение: количество
!если например 0то почему у вас стоит условие < 0 ???
for (let i = 0; i < item.length; i++) {
let pair = str.split(', ')[i];
if (pair.split(': ')[0] == 0) {
item[i].classList.add('zero');
}
item[i].textContent = pair;
}
const items = [];
items["one"]=1;
items["two"]=1;
if(items["one"]) console.log("Есть"); else console.log("Нет");
delete items["one"];
if(items["one"]) console.log("Есть"); else console.log("Нет");
// либо
items["one"]=0;
if(items["one"]) console.log("Есть"); else console.log("Нет");
Мне нужно сделать так, что если человек постоянно кликает по кнопке, то обновлять таймер
if (index > 0) {
$(this).remove();
}
if (items[name]) return;
if (items[name]) return;
if (items[name]) {
// остановка анимации таймера и запуск заново
} else {
// код первого запуска таймера.
}
Политика «Одинакового источника» говорит, что:
- если у нас есть ссылка на другой объект window, например, на всплывающее окно, созданное с помощью window.open или на window из и у этого окна тот же источник, то к нему будет полный доступ.
- в противном случае, если у него другой источник, мы не сможем обращаться к его переменным, объекту document и так далее. Единственное исключение – объект location: его можно изменять (таким образом перенаправляя пользователя). Но нельзя читать location (нельзя узнать, где находится пользователь, чтобы не было никаких утечек информации).
<iframe src="<?= $link ?>?partnerID=<?= $partnerID ?>" width="100%" height="100%" scroll="no" marginheight="0" frameborder="0" id="<?=$code?>" name="<?=$code?>"></iframe>
function loadScripts(arrScr) {
arrScr.forEach((src) => {
var scr = document.createElement('script');
scr.src = src;
document.body.appendChild(scr);
})
}
if (window.location.href.indexOf('index') != -1) {
loadScripts(['js/scripts.js', 'js/scripts2.js']);
}
// Выдает 1, а должно 0.
Remove the set of matched elements from the DOM.
т.е. удаляет набор соответствующих элементов из DOM
let $elem_1 = $('.elem-2').prev();
$elem_1 = null;
$('.elem-1').remove();
$elem_1 = null;
$(function() {
window.$elem_1 = $('.elem-2').prev();
delete window.$elem_1;
$('.elem-1').remove();
console.log(window.$elem_1.length);
// TypeError: window.$elem_1 is undefined
});
$obj = {
$elem: null,
set: function (el) {
this.$elem = el;
},
del: function() {
$(this.$elem).remove();
delete this.$elem;
},
isExists: function() {
return !!this.$elem;
}
}
$obj.set( $('.elem-2').prev() );
console.log($obj.isExists(), $obj.$elem.text());
$obj.del();
console.log($obj.isExists());
$clone.find($block).css('color', 'red');
$clone.children().eq($block.index()).css('color', 'red');
const block = '.block:nth-of-type(2)';
// ........
$clone.find(block).css('color', 'red');
$original.find(block).css('color', 'green');