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

Такая проблема. я перебираю блоки через each и на каждой "итерации" мне нужно обратится к последнему дочернему элементу блока, который сейчас рассматривается. Я что только уже не пробовал: $(this).childred('.class:last'), потом пробовал $(this).find('class.last') - но это мне ничего не дает... Как добраться до последнего дочернего элемента через this?
Ответ:
Сообщение от bboypan
Такая проблема. я перебираю блоки через each и на каждой "итерации" мне нужно обратится к последнему дочернему элементу блока, который сейчас рассматривается. Я что только уже не пробовал: $(this).childred('.class:last'), потом пробовал $(this).find('class.last') - но это мне ничего не дает... Как добраться до последнего дочернего элемента через this?
Код Javascript
1
$(this).find('.class').last()
Вопрос: Как получить дочерние элементы через querySelector?

Допустим у меня есть переменная elem, содержащая ссылку на произвольный DOM-элемент.

Можно ли через elem.querySelector получить дочерние элементы, аналогично свойству childNodes?

Селектор '>' к сожалению можно использовать только между двумя другими селекторами, например 'div>*' но нельзя непосредственно к самому вызывающему метод элементу '>*'

Или все же можно?
Ответ:
Javascript
1
var childs = elem.children;
Добавлено через 1 час 21 минуту
Непосредственные потомки = дети.
Javascript
1
var childs = document.querySelectorAll('#elem > *')
Если вы получаете элемент, например через
Javascript
1
var elem = document.getElementById('elem');
то вы не сможете использовать эту переменную в скобках querySelector'a, потому что там должна быть СТРОКА!!!

и document.querySelectorAll('elem > *') работать НЕ будет.

В скобках нужно указывать конкретно НАЗВАНИЯ тегов, идентификаторов, классов (div, #slider, .grey), а не прописывать JS-переменную (Переменные не заключаются в кавычки)
Переменная JavaScript НЕ является частью страницы, не является тегом и дочерних элементов у нее нет.
elem.querySelectorAll('> *'), тоже работать не будет!

Поэтому самый простой способ получить дочерние элементы:

Javascript
1
elem.children
Точнее переменную можно прописать, но сам querySelector требует тегов, классов, идов!

Javascript
1
2
var str = '#elem > *';
document.querySelectorAll(str);
Но это я не проверял )
Вопрос: Блок за пределами родительского

Не могу понять причину того что блок вылазиет за приделы блока растягивая страницу, пытался у родителя сделать position absolute, а у дочернего элемента relative, не вышло. Дело было в хедере поэтому плюнул, вставил overflow hidden, вроде проблема решилась, но дальше при использовании @madia для разрешения планшета получается что остальные блоки тоже растягивают родительский блок, образуется пустое белое пространсво справа, в чем мб проблема? Стиль в коде потому что планируется использовать в e-mail рассылке (p.s верстаю уже 2ой раз, видимо ошибка в логике или пробелы в знаниях).

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>
 
<style>
    body
    {
        width                : 100%;
        font-family          : 'Lato', sans-serif;
        margin               : 0;
        font-family          : "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-size            : 14px;
        line-height          : 20px;
        color                : #333333;
        background-color     : #ffffff;
    }
    div.head
    {
 
        position             : relative;
        overflow             : hidden;
        background-image     : url(https://gallery.mailchimp.com/c5cf5fc411e4a61cd904ed35b/images/40ef7d82-9d74-40fa-8c76-48af8fdbac99.jpg);
        -webkit-background-image: url(https://gallery.mailchimp.com/c5cf5fc411e4a61cd904ed35b/images/40ef7d82-9d74-40fa-8c76-48af8fdbac99.jpg);
        background-size      : cover;
        -webkit-background-size: cover;
        background-color     : #0e90d2;
        height               : 300px;
        width                : 100%;
        margin               : 0;
 
    }
 
    div.link_on_site
    {
        position             : absolute;
        background-color     : rgba(0, 0 ,0 ,0.5);
        width                : 100%;
        height               : 100px;
        padding-left         : 25px;
 
 
    }
 
    span.vertical
    {
        position            : absolute;
        width               : 400px;
        height              : 80px;
        left                : 50%;
        margin-left         : -200px;
        top                 : 50%;
        margin-top          : -40px;
    }
 
    a.head_title, h3.links, a.menu
    {
        color                : white;
        text-decoration      : none;
        text-shadow          :
                -1px -1px 0 black,
                -1px  1px 0 black,
                 1px -1px 0 black,
                 1px  1px 0 black;
 
    }
    h1.head_title, h3.center
    {
        text-align           : center;
 
    }
 
    h3.center
    {
        text-transform       : uppercase;
    }
    a.head_title:hover
    {
        color                : #128fe2;
    }
 
 
    ul {
        list-style-type: none;
    }
    .container-fluid {
        position             : relative;
        padding-right        : 15px;
        padding-left         : 15px;
        white-space          : nowrap;
 
    }
 
    div.main_content
    {
        border-bottom        : 1px solid #e5e5e5;
        margin-right         : 350px;
        
    }
 
    div.menu, div.main_content
    {
        box-shadow           : 0 0.15em 0.35em 0 rgba(0, 0, 0, 0.133);
        padding              : 20px;
        background-color     : #fff;
        border-radius        : 4px;
        margin-top           : 25px;
        display              : inline-block;
        vertical-align       : top;
        white-space          : normal;
    }
    
    div.menu
    {
        position             : relative;
        width                : 300px;
        float                : right;
    }
    @media (max-width: 768px)
    {
        .container-fluid
        {
            white-space     : normal;
            position        : relative;
        }
        div.menu
        {
            width           : 100%;
            float           : none;
            margin-right    : 15px;
        }
 
        div.main_content
        {
            width           : 100%;
        }
    }
 
    .line {
        text-align          : center;
        margin-bottom       : 10px;
    }
 
    .line > span {
        display             : inline-block;
        width               : 170px;
        height              : 2px;
        background-color    : #0e90d2;
    }
 
    .widget-title {
        font-size           : 28px;
        margin-bottom       : 0;
        text-align          : center;
    }
 
    div.footer
    {
        width               : 100%;
    }
 
    div.submenu
    {
        margin              : auto;
        margin-top          : 15px;
        height              : 25px;
        background-color    : rgba(0, 0, 0, 0.6);
        text-align          : center;
    }
</style>
 
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
 
<body>
    <div class="container-fluid">
        <div class="head">
            <div class="link_on_site">
                <a class="head_title" href="http://old-briefcase.ru"><h1>Old Briefcase</h1></a>
            </div>
            <span class="vertical"><h1 class="head_title"><a class="head_title" href="http://old-briefcase.ru/" target="_blank">Выпуск 1</a></h1></span>
        </div>
 
        <div class="menu">
            <h3 class="widget-title">Полезные ссылки</h3>
            <div class="line">
                <span></span>
            </div>
            <div class="submenu"><a class="menu" href="http://old-briefcase.ru/articles/">прочие статьи</a></div>
        </div>
 
        <div class="main_content">
            Каждый веб-разработчик знает, что такое текст-«рыба». Текст этот, несмотря на название, не имеет никакого отношения к обитателям водоемов. Используется он веб-дизайнерами для вставки на интернет-страницы и демонстрации внешнего вида контента, просмотра шрифтов, абзацев, отступов и т.д. Так как цель применения такого текста исключительно демонстрационная, то и смысловую нагрузку ему нести совсем необязательно. Более того, нечитабельность текста сыграет на руку при оценке качества восприятия макета.
 
            Самым известным «рыбным» текстом является знаменитый Lorem ipsum. Считается, что впервые его применили в книгопечатании еще в XVI веке. Своим появлением Lorem ipsum обязан древнеримскому философу Цицерону, ведь именно из его трактата «О пределах добра и зла» средневековый книгопечатник вырвал отдельные фразы и слова, получив текст-«рыбу», широко используемый и по сей день. Конечно, возникают некоторые вопросы, связанные с использованием Lorem ipsum на сайтах и проектах, ориентированных на кириллический контент – написание символов на латыни и на кириллице значительно различается.
 
            И даже с языками, использующими латинский алфавит, могут возникнуть небольшие проблемы: в различных языках те или иные буквы встречаются с разной частотой, имеется разница в длине наиболее распространенных слов. Отсюда напрашивается вывод, что все же лучше использовать в качестве «рыбы» текст на том языке, который планируется использовать при запуске проекта. Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные генераторы, создающие собственные варианты текста на основе оригинального трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.
        </div>
 
 
 
        </div>
    </div>
</body>
</html>
Добавлено через 9 минут
В @media div.main_content еще стоит margin-right : 0;
Ответ: Так и что не так? изначально padding расширяет родительский элемент, разве нет? с помощью box-sizing можно сделать чтобы ширина и высота учитывала внутренний отступ, или я что-то не так понял?
Вопрос: mouseover, mouseout - не распространяется на дочерние элементы

Штука такая:
<div style="display:inline" id="myDiv">Some Text<span style="display:none"><select..></select></div>

Event.observe('myDiv', 'mouseover', this.onIn.bindAsEventListener(this));
Event.observe(this.container, 'mouseout', this.onOut.bindAsEventListener(this));

так вот в чём проблема - при наведении на текст(some text) отрабатывает mouseover - там я показываю внутренний скрытый span. Но когда я мышь увожу на этот select в спане - срабатывает mouseout!! В в3ц вроде пишет, что он mouseover, mouseout распространяется на все дочерние элементы. Собсна хотелось-бы понять, почему так и что происходит. Если событие вешается на все дочерние - то получается отрабатывает mouseout с textNode - some text что-ли?
Ответ: это не глюк .дело в том что при вложенных элементах возникает событие оут у родительского при переходе на дочерний. но за счёт того что у вас обработчик на родительском и идёт всплытие -события генерируются в такой последовательности оут-всплытие события-овер.и почему пропускается оут в других браузерах это странно ,объяснение вижу только одно-вложенный контейнер пустой -а при пустых контейнерах событие как бы проваливается в нижний заполненный.и не важно родительский он или просто подложенный.прозрачность ему чуть поменяйте и проваливание отпадёт или бекграунд ему задайте
Вопрос: Как компактно заполнить родительский блок дочерними элементами?

Есть родительский DIV, в нем много дочерних DIV с фиксированными размерами. Задача сделать так, чтобы элементы компактно располагались с минимальным размером свободного (не занятого пространства).
Самое близкое к цели, что я смог сделать, это назначить дочерним элементам
CSS
1
display: inline-block;
или display: inline-table; (эффект такой же).В итоге получилось, что элементы выстроились с строки (см. пример). Так высота второй строки – это конец самого высокого элемента первой строки. Хотя, например, 4-й элемент мог бы уместиться под 2-м.
Как сделать чтобы элементы располагались компактней, и не выстраивались в строки?
Ответ:
Сообщение от mrtoxas
Нарисуйте какого результата вы хотите достичь
Хотелось чтобы элементы располагались по следующей логике: если принять левый верхний угол с координатами [0,0], то поиск свободного места для следующего элемента должен проходить так
Javascript
1
2
3
for ( y=0; y<ymax; y++ ){ // каждый раз с нуля
  for ( x=0; x<xmax; x++ ){
 
а в случае с inline перебор по Y идет не с нуля каждуй раз, а с максимальной высоты последней строки.
PS пока простого решения не найдено, использую библиотеку Masonry
Вопрос: Убрать изменение стиля у дочернего элемента

Доброго всем времени суток. Столкнулся со следующей проблемой. Есть div внутри которого еще два дочерних дива. У родительского div есть еще псевдокласс :hover, который дает при наведении курсора рамку. Проблема заключается в том, что при наведении рамка появляется у дочерних элементов, вместо родительского.
Ответ: Первый родитель, нижние дочерние

#korzina{
background-image: url(../images/cart1.png);
float: left;
top: 20px;
position: relative;
width: 200px;
height: 60px;
cursor: pointer;
font-weight: bold;
padding-top: 5px;
padding-left: 5px;
background-repeat: no-repeat;
}

.korzina_left{
padding-top: 8px;
padding-left: 5px;
float:left;
height: 50px;
width: 54px;
font-size: 15px;
color: #FFFFFF;
border: none;
}
.korzina_right{
padding-top: 10px;
padding-left: 5px;
float:left;
height: 50px;
}

Добавлено через 2 минуты
При добавлении этого кода рамка появлется у дочерних

#korzina :hover{
border: 1px solid #FF0000;
}

Добавлено через 1 час 31 минуту
<div id="korzina" onclick="location.href='http://">
<div class="korzina_left"><?php
print simple_commerce_cart_num();
?></div>
<div class="korzina_right"><?php
print simple_commerce_cart();
?></div>
</div>
Вопрос: Cмещение дочернего блока за пределы родительского при наличии overflow

Вобщем вот вся проблема: мне нужно скрыть все элементы, выходящие за рамки по Y, но при этом нужно сделать вылазиющий элемент по X, но если выставит overflow-y:hidden, то overflow-x наотрез отказывается быть каким-либо угодно, кроме как auto, даже если явно ему указать на visible.
Это недоработка в css такая или я туплю? Какой можно костыль придумать?
Расклад такой: --- Зелёный блок должен на 20пх выступать за рамки красного.
Ответ: А в чем проблема?
Вопрос: Как сделать так, чтобы мышка видела только указный элемент а не его дочерние элементы?

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
$(document).ready(function() {
    var obj = document.getElementById("imgArea");
 
    function onhover(evt){ 
      /* evt = window.event ? window.event : evt;
       console.log("X: " + evt.clientX);
       console.log("Y: " + evt.clientY);*/
       console.log(evt.target);
    }
    obj.onmousemove = onhover;
    
});
Проблема в том что я хочу возвращать координаты именно указного элемента, но если мишка попадает на дочерний элемент то возвращаются координаты дочернего
Ответ: Вообще-то clientX возвращает позицию мыши относительно окна. Не очень понятно, какая разница, какой элемент.
Вообще чтобы получить доступ к элементу, к которому привязан обработчик, существует this.
Вопрос: Обращение к дочернему элементу [object HTMLCollection]

Всем привет, задался вопросом, как можно обратиться к дочернему элементу [object HTMLCollection]
Есть такой код
Javascript
1
   var elem = document.getElementById('field');
внутри этого дива так же есть еще дивы, как можно к ним обратиться? Для изменения\удаления и тд?
Если к примеру у меня несколько элементов field и тд? например field1
и в каждом таком элементе к примеру есть свой див с именем 'value' как к ним обратиться?
подскажите, пожалуйста
Ответ: Поскольку мы находимся в разделе jQuery, то не понятно, почему вы не используете собственно JQ. Если вам нужна эстетика в коде, то там с этим проблем нет.
Вместо
Javascript
1
var elem = document.getElementById('field');
Пишем
Javascript
1
var elem = $('#field');
Далее вы можете найти любой элемент внутри elem по его селектору:
Javascript
1
var childs = elem.find('.someClass'); // Все элементы с классом someClass внутри #field. Уровень вложенности не имеет значения.
Вопрос: min-height у дочернего элемента

Имеются 2 div'а-родительский и вложенный в него дочерний.У обоих установлено свойство min-height,но в случае увеличения высоты дочернего элемента,высота родительского не меняется,таким образом дочерний просто вылезает за границы родительского.

Поигрался с padding,margin,overflow-ничего не выходит.
Вот код:
Ответ: Спасибо,помогло.Правда немного странно,позиционирование вроде из другой оперы:)