Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обращение к элементу (https://javascript.ru/forum/jquery/40965-obrashhenie-k-ehlementu.html)

DeD_Mazai 26.08.2013 14:40

Обращение к элементу
 
Допустим, есть документ с таким содержимым:
Код:

...<br>sometext<div></div><br>sometext<br>...
И скрипт:
function blablabla(){
$('div').append(document.createElement('br'));
$('div > br').unwrap();
}


После срабатывания скрипта div удаляется и на его место становится свежесозданный br и дерево элементов "перезагружается". Вопрос: могу ли я каким либо образом еще раз обратится к этому же br'у? По индексу искать неполучится т.к. кол-во всех br'ов неизвестно. Может его можно как нибудь "запомнить" или "пометить"?
У моего генератора идей уже села батарейка:( . Надеюсь на вашу помощь.

devote 26.08.2013 14:55

var br = document.createElement('br');
br.id = 'myBR';
$('div').append(br);


br - ссылка на вставленный бр, а можно найти его и по ID - myBR

ksa 26.08.2013 15:06

Цитата:

Сообщение от DeD_Mazai
По индексу искать неполучится

Да брось! :D
Ты его добавляешь в конец - значит он последний, вот тебе и индекс.

Цитата:

Сообщение от DeD_Mazai
Может его можно как нибудь "запомнить"

Можно и запомнить...

// вот запомнил
var o=document.createElement('br');
$('div').append(o);


Цитата:

Сообщение от DeD_Mazai
или "пометить"?

Как "пометить" уже показал devote...

DeD_Mazai 26.08.2013 15:11

devote,
Поиск по id неподходит, а вот идея с переменной мне понравилась, но возникает встречная проблема:
var div = $('div');
var br = $('br', div)[0];
alert(br.length);


Возвращает undefined. почему? у меня синтаксическая ошибка?

ksa 26.08.2013 15:15

Цитата:

Сообщение от DeD_Mazai
Возвращает undefined. почему?

А почему оно должно быть каким-то другим? :D

JS действует по своим законам, а не по наитию каких-то кодеров...
Ты сам-то хоть понял чего накодил? :D

DeD_Mazai 26.08.2013 15:21

Всё, всем спасибо, разобрался. Сейчас будем применять на практике!

DeD_Mazai 26.08.2013 15:45

А на практике не всё так гладко... В общем не буду ходить вокруг да около, вот изначальный скрипт с которым я работаю:
var sel = iframe_doc.getSelection();
var br = sel.getRangeAt(0).createContextualFragment('<br>');
sel.getRangeAt(0).insertNode(br);
$('br', sel.anchorNode).unwrap();
br.id = "myid";


br.length показывает что имеется 1 такой элемент в наборе, но вот в дереве он его не находит, и br.id = "myid"; не отрабатывает.Может есть вариант, как ему присвоить id?

Алек 26.08.2013 16:12

Вытащить последний элемент можно с помощью метода .length - 1, вот например:
var array = ["Перевый элемент","Второй элемент","Третий элемент"];
alert("Последний элемент это " + array[array.length - 1]);

Выводит Последний элемент это Третий элемент

DeD_Mazai 26.08.2013 16:51

Алек,
Вы не поняли, в данном коде браузер мне "говорит" что в переменной массиве br он видит 1 элемент, но обратится я к нему немогу...

DeD_Mazai 28.08.2013 21:40

Путём проб узнал что браузер находит элемент в дереве элементов через переменную т.е.:
var br = document.createElement('br');
$('div').append(br);
br.parentNode   //вернёт div


но в моём случае возвращает null. Может вопрос глупый, но всёже - что в данном случае означает null? нет родителя? не нашёл элемент?

ksa 28.08.2013 23:19

Цитата:

Сообщение от DeD_Mazai
что в данном случае означает null?

Null всегда означает одно и то же...
Цитата:

Значение null
Ключевое слово null в JavaScript имеет специальный смысл. Обычно считается,
что у значения null объектный тип и оно говорит об отсутствии объекта.

ksa 28.08.2013 23:27

Цитата:

Сообщение от DeD_Mazai (Сообщение 269793)
Путём проб узнал что браузер находит элемент в дереве элементов через переменную т.е.:
var br = document.createElement('br');
$('div').append(br);
br.parentNode   //вернёт div


но в моём случае возвращает null.

Бивас, тест!

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function (){
	var br = document.createElement('br');
	$('div').append(br);
	alert(br.parentNode)
	alert(br.parentNode.tagName)
	alert(br.parentNode.id)
});
</script>
</head>
<body>
<div id='test'></div>
</body>
</html>

У меня таки работает...


Часовой пояс GMT +3, время: 16:01.