Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Частичное изменение содержимого элемента (https://javascript.ru/forum/events/3276-chastichnoe-izmenenie-soderzhimogo-ehlementa.html)

kuhok 02.04.2009 16:37

Частичное изменение содержимого элемента
 
Для частичного изменения содержимого элемента, насколько я понял, используется InnerText, но он работает только в ИЕ.

Как получить часть содержимого InnerHTML?

HTML
Код:

<td id=1 onClick="Object.Method(this)">
<div id="word_id">Id</div> Name
</td>

JS
Код:

Object.addToRange = function addToRange(cell){
this[i] = (cell.innerHTML);
};

В JS хочу извлечь не содержимое всей ячейки, а только то, что находится в div

twolf 02.04.2009 17:10

у Вашего div задан id. так что обращайтесь прямо к нему:
getElementById('word_id').innerHTML
Если не будет id, то через childNodes

kuhok 02.04.2009 17:53

Я пытался так делать..но почему-то не получается.
Возможно, это связано с тем как я вызываю функцию (с параметром cell)?

twolf 02.04.2009 18:47

кстати да, бардак у вас с вызовом.
и id с цифры не может начинаться.
вот
<td onclick="myfunc()">
<div id="word_id">Id</div> Name 
</td>

function myfunc(){
var mydata = document.getElementById('word_id').innerHTML;
alert (mydata);
}

IIIEPJIOK 02.04.2009 19:04

Цитата:

и id с цифры не может начинаться
уверены? ;-)

twolf 02.04.2009 21:55

Цитата:

Сообщение от IIIEPJIOK (Сообщение 15797)
уверены? ;-)

Спецификация HTML 4.01
Маркеры ID и NAME должны начинаться с буквы ([A-Za-z]) и могут после буквы содержать любое количество букв, цифр ([0-9]), дефисов ("-"), подчеркиваний ("_"), двоеточий (":") и точек (".").

еще:
Цитата:

Значение id должно начинаться с буквы или подчеркивания, оно не может начинаться с цифры. Служба проверки кода W3C может и не заметит подобную ошибку, однако анализатор XML ее обнаружит. Также, если вы намереваетесь использовать id в JavaScript в форме document. idname. value, необходимо присвоить ему допустимое имя переменной JavaScript, которое должно начинаться с буквы или символа подчеркивания и в которых не допускается использование пробелов или дефисов. Также нежелательно использовать символы подчеркивания в именах class или id по причине старых ограничений в CSS и старых браузерах.

Правила применения атрибута id (окончание). Наконец, для самых строгих приверженцев стандартов отметим, что первым символом в имени id или class может быть и цифра - вместо самой цифры необходимо указать соответствующую escape-последовательность. Правда, таким методом никто не пользуется.

IIIEPJIOK 02.04.2009 22:57

я не спрашивал, что об этом написано в спецификации, действительно ли вы уверены, что id нельзя начинать с цифры?

Т.е по вашему, ниже приведенный код работать не будет?

<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
  <title></title>
</head>

<body onload="alert(document.getElementById(1).innerHTML)">
<div id=1>мда :)</div>
</body>

</html>

Gvozd 03.04.2009 00:23

IIIEPJIOK,
где будет работать?
например,с XHTML-ным doctype-ом на мобильнике будет работать?
а под Konquere?
а под остальными браузерами?
не факт.
половина багов не-кросбраузерных скриптов свящана с нежеланием разработчиков браузеров следовать стандартам.
вторая половина, из-за нежелания/неумения разработчиков скриптов следовать стандартам.
В BOM-е есть объект window.elements
его даже можно заставить нормально работать в мозилле, при помощи доктайпа.
но, это не повод его использовать.
потому что есть getElementByID, который работает одинаково хорошо во всех браузерах, и об этом известно наверняка

IIIEPJIOK 03.04.2009 09:17

IE, Opera FF, GoogleCrome, Safari и с xhtml доктайпом - будет - факт :)
Цитата:

а под Konquere?
- тут конечно меня вы прихватили :), настолько популярный броузер, а у меня его нет, досада :)

kuhok 03.04.2009 09:58

Цитата:

Сообщение от twolf (Сообщение 15796)
кстати да, бардак у вас с вызовом.
и id с цифры не может начинаться.
вот
<td onclick="myfunc()">
<div id="word_id">Id</div> Name 
</td>

function myfunc(){
var mydata = document.getElementById('word_id').innerHTML;
alert (mydata);
}

Спасибо, работает. Но не совсем так, как я хотел.
Сейчас в mydata помещается содержание 1ой ячейки таблицы..а я хочу, чтобы текущей - именно той, на которую onclick срабатывает

twolf 03.04.2009 12:15

Цитата:

я не спрашивал, что об этом написано в спецификации, действительно ли вы уверены, что id нельзя начинать с цифры?
Если Вы не поняли - поясню. Да,я уверен, что id нельзя начинать с цифры.
допишите к своей единичке буквы и протестируйте в браузерах.

IIIEPJIOK 03.04.2009 13:53

Ну, коль пятница, можно и по холливарить :)

Проверено в Опере, ГуглХром, ИЕ, Сафари и ФФ - работает
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
  <title></title>
</head>

<body onload="alert(document.getElementById('1word').innerHTML + ' ' + document.getElementById('2word').innerHTML)">
<div id=1word>hello</div>
<div id=2word>world</div>
</body>

</html>


Также работатет (хоть это и полное безобразие) с
<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

AzriMan 03.04.2009 14:19

вот вам заняться нечем :)
за окном тяпница! эх, еще 221 минута и выходные!

twolf 03.04.2009 14:38

сдаюсь. :) пусть это останется на совести разработчиков браузеров

IIIEPJIOK 03.04.2009 15:09

:)

AzriMan 03.04.2009 15:10

Цитата:

Сообщение от IIIEPJIOK (Сообщение 15850)
Ну, коль пятница, можно и по холливарить :)

а бывают холи вары? я знаю холи палов, холи пристов.. а вот варов - у них нет такой ветки талантов :-D

kuhok 03.04.2009 15:19

а на мое сообщение предыдущее ответьте, плз:)
а то все выходные не усну :D

AzriMan 03.04.2009 15:29

Цитата:

Сообщение от kuhok (Сообщение 15857)
а на мое сообщение предыдущее ответьте, плз:)
а то все выходные не усну :D

Вам же написали:
Цитата:

Сообщение от twolf (Сообщение 15791)
у Вашего div задан id. так что обращайтесь прямо к нему:
getElementById('word_id').innerHTML
Если не будет id, то через childNodes


kuhok 03.04.2009 16:05

Цитата:

Сообщение от AzriMan (Сообщение 15858)
Вам же написали:

Да не, вот на это- http://javascript.ru/forum/events/32...html#post15825

AzriMan 03.04.2009 16:13

Цитата:

Сообщение от kuhok (Сообщение 15825)
Спасибо, работает. Но не совсем так, как я хотел.
Сейчас в mydata помещается содержание 1ой ячейки таблицы..а я хочу, чтобы текущей - именно той, на которую onclick срабатывает

эээээээ. ну вы как поставили задание - вам так и ответили.
у вас что, несколько ячеек имеют одинаковый id?

в целом, надо как-то примерно так:
<td onclick="myfunc(this)">
<div id="word_id">Id</div> Name 
</td>

function myfunc(obj){
var mydata = obj.getElementsByTagName('DIV')[0].innerHTML;
alert (mydata);
}


может я где-то в чем-то ошибся, - поправьте. уже сижу на работе и засыпаю....


--edited x2
p.s. гы. карма: 9; кол-во постов: 99;

;D

kuh 05.04.2009 21:08

Цитата:

Сообщение от AzriMan (Сообщение 15862)
эээээээ. ну вы как поставили задание - вам так и ответили.
у вас что, несколько ячеек имеют одинаковый id?

в целом, надо как-то примерно так:
<td onclick="myfunc(this)">
<div id="word_id">Id</div> Name 
</td>

function myfunc(obj){
var mydata = obj.getElementsByTagName('DIV')[0].innerHTML;
alert (mydata);
}


может я где-то в чем-то ошибся, - поправьте. уже сижу на работе и засыпаю....


--edited x2
p.s. гы. карма: 9; кол-во постов: 99;

;D

Спасибо. Отлично работает:)

Bulkin 09.04.2009 15:25

Ребята, извините что вклиниваюсь. Но тема ваша мне родна как никогда.
Мне надо в div или table (еще не решил) вставить html файл. Чтобы он обработался как html именно. Подскажите, бьюсь не могу найти решения. (если сложно описал проблему - извините, впервой).

AzriMan 09.04.2009 16:25

что означает "вставить html файл"? прочитать содержимое файла с диска и вставить содержимое в div или table? я могу ошибаться, но никак.

Bulkin 09.04.2009 18:17

Не содержимое, а загрузить код. Что-то типа фрейма, но не фрейм. Я бы фреймом реализовал, но у него плохо работает скроллинг. Вернее ваще не работает, скролит только сам фрейм,а мне надо страницу.

Riim 09.04.2009 21:12

Грузи ajax-ом и записывай в div

AzriMan 10.04.2009 16:18

Цитата:

Сообщение от Bulkin (Сообщение 16263)
Не содержимое, а загрузить код. Что-то типа фрейма, но не фрейм. Я бы фреймом реализовал, но у него плохо работает скроллинг. Вернее ваще не работает, скролит только сам фрейм,а мне надо страницу.

что в вашем понятии означает "загрузить код html файла"?

alk0v 05.09.2009 03:01

Тоже интересует подобный вопрос, можно ли в
document.body.innerHTML
в качестве параметра передать не строковую переменную, а ссылку на внешний файл с html-кодом. Это нужно, чтобы по событию обновлялась только часть страницы а не вся страница, возможно ли такое?

B~Vladi 07.09.2009 09:57

Цитата:

Сообщение от alk0v
в качестве параметра передать не строковую переменную, а ссылку на внешний файл с html-кодом

Дк попробуй, в чём проблема?:)

alk0v 07.09.2009 22:44

спасибо, все уже решилось с помощью XMLHttpRequest


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