2013-11-27 1 views
0

Я хочу изменить верхнее значение css с помощью javascript, но это не сработает.Javascript - изменить стиль верхнего уровня из «ul» как дочерний элемент из родителя div

У меня есть следующий код:

HTML:

<button onclick="Down()">Move Down</button> 
<div class="test"> 
    <ul> 
     <li>Line one</li> 
     <li>Line two</li> 
     <li>Line three</li> 
    </ul> 
</div> 

CSS:

.test { 
    color:red; 
    height: 200px; 
    width: 200px; 
} 
.test ul{ 
    position: relative; 
    top:50px; 
} 

Javascript:

function Down() { 
    var class_obj = document.getElementsByClassName("test"); 
    var ul_obj = class_obj.getElementsByTagName("ul"); 
    ul_obj.style.top = parseInt(ul_obj.style.top, 10) + 10 + "px"; 
} 

http://jsfiddle.net/fUmJR/

Что мне не хватает?

+0

Если вы проверяете журнал косола из-за этой скрипки. После щелчка он бросает один раз исключение. Неиспользуемый ReferenceError: Вниз не указан – Triode

+1

Это 2013. Не используйте обработчики вторжений. – BenM

+0

https://developer.mozilla.org/en-US/docs/Web/API/EventListener – rafaelcastrocouto

ответ

1

Похоже, вам нужно немного поменять загрузку JS на jsFiddle. Взгляните на мой образ, чтобы узнать, как действовать дальше. в отладке js, alert - ваш лучший друг!

changes I made on jsfiddle to demonstrate how to get started fixing your code

+1

Не уверен, что 'alert' будет вашим лучшим другом ... Консоль может завидуть –

+0

-1. Это не решает вопрос. Причина, по которой код не работает, заключается в том, что 'getElementsByClassName()' поддерживается только на 'document'. Второй вызов завершается неудачно (см. Консоль в данном примере). – BenM

+0

BenM, посмотрите на консоль для этого примера в jsFiddle: «Вниз не определено». По-моему, мы немного отличаемся от подхода. Этот человек довольно новичок в js/fiddle (черт возьми, я новичок в скрипке). Я считаю, что лучше научить рыбу, а не рыбу. ваш комментарий тоже полезен, но есть много вещей, чтобы указать, например, «ul» не является именем класса. –

1
window.Down = (function() { 
    var ul_obj = document.querySelectorAll('.test ul'); 
    Array.prototype.slice.call(ul_obj).forEach(function(element){ 
     element.style.top = parseInt(element.style.top||50) + 10 + 'px'; 
    }) 
}); 

Функция вниз() в window.onload является локальной переменной с jsfiddle.

0

Прежде всего getElementsByClassName и getElementsByTagName Листы возврата не являются элементами. И, во-вторых, проверьте, что то, что parseInt возвращает, - это число перед применением стиля.

Все это можно найти путем отладки кода.

0

Это должно быть код, чтобы сделать это так, как вы себе представить:

this.Down = function Down() { 
    var ul_obj = document.getElementsByTagName("ul"); 
    if(!ul_obj[0].style.top) ul_obj[0].style.top = '50px'; 
    ul_obj[0].style.top = parseInt(ul_obj[0].style.top, 10) + 10 + "px"; 
} 

и вызвать функцию через

<button onclick="javascript:window.Down()">Move Down</button> 

код не работает, потому что ваша функция была в window.onload, поэтому Down() даже не было видно

Вот ваше решение: jsFiddle

Чтобы сделать его более простым, если вы хотите избежать, если блок (который используется, поскольку Javascript может получить style.top только встроенный CSS форматирование), вы могли бы рассмотреть вопрос об использовании этого кода, который включает в себя offestTop:

this.Down = function Down() { 
    var ul_obj = document.getElementsByTagName("ul"); 
    ul_obj[0].style.top = parseInt(ul_obj[0].offsetTop, 10) + 10 + "px"; 
} 

, но вам нужно установить позицию: относительно вашего класса .test!

0
  • JsFiddle не работает так, как нужно изменить параметр из «OnLoad» на «Нет обруча - в»

  • При использовании таких методов, как «getElementsByClassName» или «getElementsByTagName» Вы получаете массив элементов. Поэтому вам необходимо ссылаться на первый элемент массива.

Обратите внимание, что я добавил ссылку на товар.

function Down() { 
    var oTest = document.getElementsByClassName("test")[0]; 
    var oUl = document.getElementsByTagName("ul")[0]; 
    oUl.style.top = parseInt(oUl.style.top, 10) + 10 + "px"; 
} 

  • Кроме того, я заметил, что у вас неправильный метод для элемента. Он должен быть «", а не «getElementsByClassName».

+0

Спасибо всем за ваши ответы! Оно работает :) – AlexPac

Смежные вопросы