Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Почему работает такая конструкция

var str = "(096)99::00:775";
	var str2 = str 
		.replace("::", "-")
		.replace(":", "-");
	alert(str2);

Смущают меня строки 2, 3 и 4. Где можно прочитать про то, почему это работает и увидеть ещё какие-нибудь "штучки" наподобие этого?

P.S. мне это чем-то напоминает инструкцию with
Ответ: Keramet,
Только один нюанс. В Вашем примере мы имеем дело с возвратом нового объекта, там данные не мутируют. Точней ваш случай можо проилюстрировать вот этим примером
someObject = function(value){
  this.value = value
}
someObject.prototype.add = function(n){return new someObject(this.value + n)}

alert( new someObject(1).add(1).add(2).value)

т.e. тот же самый принцип, только ничего не меняем. эдакая монада.
Вопрос: Почему работает только первый if?

Русские буквы преобразую в коды символов, остальные потом обратно в самих себя.
<script>
      html = "<html><head>АаБб</head></html>";
      longtext = html.length;
      console.log(longtext);
    
    var arr = new Array();
    var code = new Array();
    for (i = 0; i < longtext; i++) {
        
      arr[i] = html.charCodeAt(i);
      
      if(1039 < arr[i] < 1072){
         code[i] = '['+arr[i]+']'; console.log("1 if");
      }
      else if(arr[i] == 1025){
        code[i] = '['+arr[i]+']'; console.log("2 if");
      }
      else if(arr[i] == 1105){
        code[i] = '['+arr[i]+']'; console.log("3 if");
      }
      else if(1071 < arr[i] < 1104){
        code[i] = '['+arr[i]+']'; console.log("4 if");
      }
      else{
        code[i] = html.charAt(i); console.log("other if");
      }

    }
</script>

Ответ на каждый символ 1 if т.е. всегда выполняется только первое условие. Почему?
Ответ:
Сообщение от mrbanan
1039 < arr[i] < 1072
Сначала будет проверка 1039 < arr[i], выдаст true или false, потом этот true/false < 1072.

Надо так:
1039 < arr[i] && 1072 > arr[i]
Вопрос: Некорректно работает :hover в safari

Добрый день, уважаемые форумчане! Слезно прошу у вас помощи, или хотя бы пинка в направлении, в котором нужно копать...

Задумка: эффект появления текста и затемнения при наведении на картинку. Реализовано здесь:

Работает вроде прекрасно на всех устройствах и браузерах КРОМЕ Safari на Iphone. Там почему работает только для последней картинки (скрипичный балет). А для первых трех нет. Но какая разница? Ведь форматирование у всех одинаковое! Я просто не понимаю в чем может быть дело.

HTML разметка одинаковая для всех блоков:
HTML5
1
2
3
4
5
6
7
8
9
<div>
  <figure class="effect-sarah">
    <img>
    <figcaption>
      <h2>Заголовок</h2>
      <p>Описание</p>
    </figcaption>
  </figure>
</div>
CSS файл именно для этого эффекта прикрепила во вложение.

Заранее благодарна за любую помощь!
Ответ: Только это не класс, а событие
Вопрос: Как работает наследование в CSS?

Почему когда я пишу так
HTML5
1
2
    <header>
      <div class="page-header
стили на верхнюю шапку не действуют, но если напишу вот так
HTML5
1
<header class="page-header">
то стили в CSS работают вот они
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* Header */
header.page-header {
    position: relative;
    z-index: 5;
    min-height: 20px;
    padding: 20px;
    color: white;
    background-image:
        linear-gradient(45deg, #34495e 25%, transparent 25%),
        linear-gradient(-45deg, #34495e 25%, transparent 25%),
        linear-gradient(135deg, #34495e 25%, transparent 25%),
        linear-gradient(-135deg, #34495e 25%, transparent 25%);
    background-position: 10px 0, 10px 0, 0 0, 0 0;
    background-size: 20px 20px;
    box-shadow: 0 0 5px 0 #333333;
}
Вот сам код
здесь пример html и css кода а также отображается веб страница.
Обьясните мне пожалуйста не понимающему почему если я создам див с классом после тега header этот css код не работает, а если я задам этот класс тегу header то код работает. Ведь как я понимаю такой код в CSS
CSS
1
header.page-header { }
говорит о том что внутри тега header есть элемент с классом page-header и для него применить следующие стили. Но видать я не правильно понимал все. Обьясните пожалуйста как это все работает?
Ответ:
Сообщение от brahmanchikk
Почему когда я пишу так
HTML5
1
2
    <header>
      <div class="page-header
стили на верхнюю шапку не действуют, но если напишу вот так
HTML5
1
<header class="page-header">
то стили в CSS работают вот они
CSS
1
2
3
/* Header */
header.page-header {   
}
Обьясните мне пожалуйста не понимающему почему если я создам див с классом после тега header этот css код не работает, а если я задам этот класс тегу header то код работает. Ведь как я понимаю такой код в CSS
CSS
1
header.page-header { }
говорит о том что внутри тега header есть элемент с классом page-header и для него применить следующие стили. Но видать я не правильно понимал все. Обьясните пожалуйста как это все работает?
— css-селектор header.page-header, выбирает html-элемент с именем header, имеющим класс page-header, т.е.

HTML5
1
2
3
4
<header class="page-header">
    <div>
    </div>
</header>
— css-селектор header .page-header (через пробел), выбирает html-элемент с классом page-header, находящимся внутри html-элемент с именем header , т.е.

HTML5
1
2
3
4
<header>
    <div class="page-header">
    </div>
</header>
Также, рассматривая этот пример в отдельности, можно задать для div class="page-header следующие селекторы:
header div{}
header>div{}
header:first-child{}
header:last-child{}
div{}
div.page-header{}
Вопрос: Не понимаю почему не работает скрипт.(Замыкания)

Помогите пожалуйста.
Не работает свойство .inBetween (запускает бесконечный цикл)
Не могу почему-то сделать методы .split(скрипт перестает работать) и .join(метод игнорируется) для selector.
var arr = [1, 2, 3, 4, 5, 6, 7];
function filter(array) {
var massive = [];
return {
inBetween: function(a, b) {
for (var i = 0; i < array.length; i++) {
if (array[i] > a || b > array[i]) {
array.push(massive);
}
}
return massive;
},
inArray: function(selector) {
for (var i = 0; i < array.length; i++) {
for ( var c = 0; c < selector.length; c++) {
if (array[i] == selector[c]) {
selector.push(massive);
}
}
};
return selector;
}
};
}
var select = [1,3,5];
alert(filter(arr).inArray(select));
alert(filter(arr).inBetween(3,6));
Ответ:
Сообщение от ITGun
Не понимаю почему не работает скрипт.(Замыкания)


Хорошо замкнуло

var arr = [1, 2, 3, 4, 5, 6, 7];
function filter(array) { var massive = []; return {
inBetween: function(a, b) { for (var i = 0; i < array.length; i++) { if (array[i] >= a && b >= array[i]) { massive.push(array[i]); } } return massive; },
inArray: function(selector) { for (var i = 0; i < selector.length; i++) {
for ( var c = 0; c < array.length; c++) { if (array[c] == selector[i]) { massive.push(selector[i]); } } }; return massive; } }; }
var select = [1,3,5];
alert(filter(arr).inArray(select));
alert(filter(arr).inBetween(3,6));
Вопрос: AddEventListener не правильно работает с классами

Может немного некорректно тему назвал, но все же..

Давайте для начала приведу код..

function Block(){ 

	this.elem; 

	this.create = function(id){ 
		body.innerHTML += "<div id='"+id+"'></div>"; //бади написал просто что бы короче было 
		
		this.elem = document.getElementById(id); 

		this.elem.addEventListener("mousedown", function(){ 
			console.log("Pressed") // То, что должно печататься при нажатии на блок 
		},false); 
	}; 

};

// Далее создаем эти блоки 

var block1 = new Block(); 
var block2 = new Block(); 
block1.create(1); //Тут обработчик события не работает вообще (но если не создавать block2, то работать будет). 
block2.create(2); //Тут обработчик события привязывается и работает.

// Если изменить порядок create(), ничего не поменяется. У block1 вообще не работает обработчик после создания block2. Даже если перед созданием block2 сделать block1.create(). Оно будет работать только до тех пор, пока не будет создан block2.



То есть проблема в том, что если элемент был создан внутри класса, и там же назначен обработчик события, то при создании ещё одной копии класса, у прошлого перестает назначаться и работать обработчик..

Я уже пытался внутри класса отдельно вывести назначение обработчика. Так же пытался другие типы (onmousedown и даже attachEvent). Ничего не помогает.

Так же пытался вне класса назначить, но тут тоже интересная ситуация:

Код:
*Код класса, но без назначение обработчика при создании* 

var block1 = new Block(); 
block1.create(1); //Просто создаем блок 1. 

var block2 = new Block(); 
block2.create(2); //Просто создаем блок 2. 

console.log(block1.elem); // Выводит: <div id='1'></div>
console.log(block2.elem); // Выводит: <div id='2'></div>
console.log(document.getElementById(1)); // Выводит: <div id='1'></div>
console.log(document.getElementById(2)); // Выводит: <div id='2'></div>

// И так и так выводятся правильные элементы


Продолжение кода:

Вот как НЕ работает
block1.elem.addEventListener("mousedown", function(){console.log("Pressed")},false); // Не работает.
block2.elem.addEventListener("mousedown", function(){console.log("Pressed")},false); // Работает.


Вот так Работает
document.getElementById(1).addEventListener("mousedown", function(){console.log("Pressed")},false); // Работает.
document.getElementById(2).addEventListener("mousedown", function(){console.log("Pressed")},false); // Работает.


Непонятно мне, почему и block.elem и document.getElementById() выводят правильные значения, но при этом обработчик работает только на второй вариант. Кстати если внутри самого create() сделать не по this.elem, а так же по гетЭлемИд, то тоже не работает.

В общем-то не понимаю тут немного логики и прошу помощи. Подозреваю, что это все именно из-за классов, но что именно, не знаю.

Буду очень благодарен за помощь.
Ответ: рони,
Благодарю, теперь все работает.

Хотя единственное не понятно, почему во втором случае не работало, когда я эвенты биндил отдельно по block.elem, но по GetElementById работало.
Вопрос: Почему в мозиле не работает jquery код?

Здравствуйте.
Подскажите почему в мозиле не работает этот код? Во всех остальных браузерах прекрасно отрабатывает!

$(document).ready(function () {

       // Посилання з id="test" буде тригером події

       $(".comments-page").click(function() {
           event.preventDefault();
           var url = $(this).attr('href');

           // AJAX-запит на потрібну адресу

           $.get(url, function(data) {

               // Замінюємо текст тегу з id="target" на отримані дані

               $("#comments").html(data);

           });

       });

   });

Посмотреть можно посередине страницы выведена пагинация для комментариев.
Ответ: blazer-05,
на страницу грузят
jquery.min.js один раз -- потом все плагины и весь код который работает с jquery -- в конце bootstrap.min.js

почему страница работает в остальных браузерах мне непонятно , мозилла может сбоить только из-за отсутствия event .
Вопрос: Почему открываются картинки при rewriterule (.*)

Езь сайт, написал туда
RewriteRule (.*) /blabla/index.php/$1
То есть все пересылается на /blabla/index.php/, как я понимаю.
После ctrl+f5 ксс, жаваскрипты все, конечно же, сразу сломались, однако картинки по неведомой причине продолжают открываться. Что за чудеса? Не, я, конечно, рад, что не пришлось дописывать лишние правила в хтацесс, но как оно работает и почему?
Ответ:
Сообщение от Emilien
Возможно, в .htaccess есть другие правила RewriteRule, которые обабатыают картинки.
В корневой папке файл htaccess ток один с одним правилом, которое я написал в первом посте.
Сообщение от Emilien
Возможно, перед Apache стоит Nginx, который самостоятельно раздает картинки.
Ох, как все запутано-то.

Добавлено через 4 минуты
Короче, все походу вот почему, если быть точнее, то в корне сайта есть такой хтацесс
PHP
1
RewriteRule (.*) /first/second/index.php/$1
А в папке first есть тоже хтацесс с таким содержанием:
PHP
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Но при этом в папке second никакого хтацесса нету. А так понимаю, апач проверяет наличие хтацесса не только в конечной папке, но и во всех перечисленных? Но я все равно тогда не совсем понимаю, как оно работает. Если эти правила работают, то css файлы и скрипты тоже должны были выдаваться вместе с картинками, они же тоже файлы?
Вопрос: Почему не срабатывает условие при проветке атрибутов?

Пытаюсь перебрать атрибуты элемента в цикле, и в зависимости от текущего значения атрибута, нужно или удалить этот атрибут или оставить. Но почему -то не не срабатывает условие.
Если раскомментировать в коде js 5-ю строку, то условие не срабатывает и удаляются все атрибуты, а нужно удалить только те атрибуты, которые не являются data-bg и data-border.
Т.е. при проверке только одного data-атрибута, как сейчас в коде, то условие работает, а если проверять два атрибута, то условие не работает.
HTML5
1
2
3
4
5
<ul>
    <li style="border:1px solid" data-bg="background-color:#000" data-border="border:1px solid">test</li>
</ul>
 
<button>click</button>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
$('button').on('click',function(e) {
    $('li').each(function(i,li) {
        $(li.attributes).each(function(j,a) {
                //alert($(li).data(a.name.split('-')[1]))
            //if(a.name != "data-bg" || a.name != "data-border"){
            if(a.name != "data-bg"){
                $(li).removeAttr(a.name);
            }else{
                    li.style.cssText=$(li).data(a.name.split('-')[1]);
            }
        })
    })
});
Ответ:
Сообщение от phpk
да, сейчас работает, но я так и не понял почему условие с || не срабатывает
Если у вас сейчас "data-bg" то тогда мы удалим "data-border", а когда будет "data-border" мы удалим "data-bg".
Вопрос: TypeScript - почему AddCustomer() не работает?

module CustomerUIModule {


    export class CustomerUIModel {

        public customers: KnockoutObservableArray<CustomerModule.Customer>;
        service: CustomerServiceModule.CustomerService;



        constructor(svc: CustomerServiceModule.CustomerService, data: any) {
            this.service = svc;
            this.customers = ko.observableArray(data);
        }

        // DOESN'T WORK - called but this.customers is nothing
        AddCustomer(elem: CustomerModule.Customer) {
            this.customers.push(elem);
        }

        // WORKS!!!
        AddCustomer2 = (elem: CustomerModule.Customer): void => {
            this.service.Insert(elem, (d) => {
                var tt = 0;
            });
            this.customers.push(elem);
        }


В AddCustomer2() this.customers вполне себе адекватный. А вот почему в AddCustomer() там оказыается NULL?
Ответ: Хотя нет, сори я какую-то ерунду написал выше.

В методах this такое-же как и в class.
Все по идее должно работать. Почему у вас оно не работает, понятия не имею.
Самому теперь интересно.