Как создать appendChild без изменения макета HTML-документа

#javascript #html

#javascript #HTML

Вопрос:

Я использую JavaScript для добавления прослушивателя событий, который заставит текст появляться внутри фотографии в моем HTML-документе при наведении курсора мыши. Мне удалось добавить событие, и когда я прокручиваю картинку, мой текст появляется внутри картинки.

Моя проблема в том, что, хотя текст отображается внутри фотографии, как и планировалось, как только текст появляется, он изменяет формат документа и удаляет из него все окружающие элементы. Я хотел бы иметь возможность добавлять текст внутри элемента, не влияя на макет окружающих элементов.

Я пытался использовать innerHTML, appendChild и textContent для решения этой задачи. Все они успешно отображают мой текст внутри элемента, но у всех них одинаковая проблема с удалением от него окружающих элементов.

 <script>
document.getElementById("box1").addEventListener("mouseover", mouseOver);


function mouseOver() {
    var pictureContent = document.createElement("p");
    pictureContent.textContent = "China, officially the People's Republic of China, is a country in East Asia and the world's most populous country,";
    document.getElementById("box1").appendChild(pictureContent);
} 

</script>
  

Комментарии:

1. Похоже, это скорее проблема с CSS.

2. можете ли вы поделиться HTML-кодом

3. вероятно, нужен position:absolute CSS

Ответ №1:

Ваша проблема скорее связана с CSS, просто добавьте position: absolute стили позиционирования после создания элемента с помощью style.cssText .

 function mouseOver() {
    var pictureContent = document.createElement("p");
    pictureContent.textContent = "China, officially the People's Republic of China, is a country in East Asia and the world's most populous country,";
    pictureContent.style.cssText = "position:absolute"
    document.getElementById("box1").appendChild(pictureContent);
} 
  

Комментарии:

1. Спасибо за вашу помощь. Я смог добавить текст на страницу, не влияя на расположение окружающих элементов. Проблема сейчас в том, что «позиция: абсолютная» означает, что текст будет отображаться в строке, и я не могу разбить его на куски, необходимые для размещения его в поле, которое мне нужно. У вас есть какие-либо предложения по этому поводу?

2. Что вы подразумеваете под разделением на фрагменты? Вы имеете в виду перенос текста?

3. Привет, James_F. Я нашел решение. Я использовал innerHTML вместо textContent, что позволило мне использовать <br> для разделения строк и обеспечения того, чтобы текст помещался в нужное мне поле. На данный момент у меня все готово, но, пожалуйста, дайте мне знать, если у вас возникнут какие-либо вопросы или комментарии. Спасибо за ваш вклад!