Метод Jquery .html, похоже, не работает

#javascript #jquery #three.js #editor #sweetalert

Вопрос:

Проект редактора, который я создаю, должен позволить мне импортировать библиотеку cdn и использовать ее для написания кода . Поэтому , чтобы показать мою проблему, введите https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js в поле импорт cdn введите и нажмите кнопку Импорт . Затем введите это в раздел кода :

 const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

const renderer = new THREE.WebGLRenderer();
document.body.appendChild( renderer.domElement );

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

const animate = function () {
    requestAnimationFrame( animate );
    cube.rotation.x  = 0.01;
    cube.rotation.y  = 0.01;
    renderer.render( scene, camera );
};

animate();
 

Нажмите кнопку «Выполнить» вверху . У вас должно появиться крошечное окошко с тремя js внизу. Мой первый вопрос: почему текст не определен выше рендеринга ? И второе , если вы измените код во входных данных на :

 const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

const renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

const animate = function () {
    requestAnimationFrame( animate );
    cube.rotation.x  = 0.01;
    cube.rotation.y  = 0.01;
    renderer.render( scene, camera );
};

animate();
 

Это добавляет еще один рендеринг к div . Почему? особенно когда я использовал метод .html для замены содержимого div . Мой полный код виден здесь

Ответ №1:

При проверке консоли Javascript становится ясно, что средство визуализации добавляется не в #body2, а в document.body.

Эта строка:

 document.body.appendChild( renderer.domElement );
 

добавляет средство визуализации к элементу тела.

Неопределенное связано с String( eval( $("#editor #editor-textarea").val() ));

Текстовое содержимое в eval должно что-то возвращать. https://www.w3schools.com/jsref/jsref_eval.asp

В этом случае возвращаемое значение $("#editor #editor-textarea").val() не определено. Следовательно eval(undefined) , есть undefined и String(undefined) есть "undefined"

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

1. Огромное спасибо ! Но если я не могу использовать document.body.appendChild( renderer.domElement ); , то что я использую? И как мне удалить неопределенный текст?

2. Вы можете установить содержимое как iframe src и изменять его при каждой отправке. Это также изолирует код от родительского документа, поэтому он не повлияет на страницу. Изложил суть здесь: gist.github.com/chaitanya-deep/f31848f2270d682611ef4577b4c6800b

3. Мило.. Спасибо , но у меня есть два вопроса . По сути , iframe даже не использовался . Кажется, что он просто установлен в»document.getElementById («body2»);`. И что такое постоянное содержание ? Это тело iframe ? Если это так , то почему туда попадают теги сценариев?

4. «body2» — это идентификатор iframe. Файл index.html строка 40. Да. содержимое-это тело iframe. Теги сценариев — это список всех импортируемых файлов, добавляемых пользователем. Строка 16. Когда пользователь добавляет библиотеку, она добавляется в заголовок в виде тега сценария, чтобы ее можно было использовать в коде, написанном пользователем

5. Ах ,большое спасибо . Отметьте это правильно.