Jump to content
  • 0

Обход дерева без "внуков"


Evgen111
 Share

Question

Есть страница с такой структурой

 

<div id="Start">
|
+—-<div>
|      +——- произвольное количество тегов, в том числе <div>
|      +——- произвольное количество тегов, в том числе <div>
|
+—-<DIV>  Нужный тег

 

Нужно получить объект <DIV>, помеченный красным цветом.

Через GetElementById("Start").GetElementsByTag("DIV") не получается, т. к. из-за произвольного количества тегов в предыдущем теге <div>, номер нужного тега всегда разный. Но он всегда второй относительно тега <div id="Start">. Как программно получить ссылку на этот объект?

 

p.s. Программа на VBA, внешние библиотеки подключать нельзя.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

GetElementById("Start").children[1]

Немного не корректно нарисовал. Вот так правильнее

 

<div id="Start">

|

+—— Произвольное количество тегов, НЕ <div>

|

+—-<div>

|      +——- произвольное количество тегов, в том числе <div>

|      +——- произвольное количество тегов, в том числе <div>

|

+——- Произвольное количество тегов, НЕ <div>

|

+—-<DIV>  Нужный тег

Edited by Evgen111
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Super_Saimo
      Добрый день! Столкнулся с проблемой отображения информации из localStorage после перезагрузки страниц. Делаю to do list, добавление тасков, удаление проходит нормально, добавляются элементы в localStorage, но после перезагрузки список тасков пуст на странице.  Сам код https://jsfiddle.net/zdbmsjv2/ Извиняюсь за чрезмерное количество комментариев. Писал для себя, чтобы не забыть потом. 
    • By Super_Saimo
      Добрый день! Помогите разобраться с работой метода closest(). В приведенном примере https://jsfiddle.net/ymnjo3tc/   , я делаю все "по инструкции":  беру дочерний элемент и проверяю  наличие у него родительского при помощи данного метода. Но в ответ всегда ловлю один и тот-же Exception. Какие бы я не пробовал проверять элементы. В чем может быть проблема? Где я допускаю ошибку? Да и вообще, применим ли этот метод на практике? И в каких ситуациях? 
    • By Libiros
      Решил использовать .webp для изображений на сайте, а также оптимизировать его через рекомендации google audits.
      Таким образом получилось следующее:
      <img src="image.webp" srcset="image-480.webp 480w, image-768.webp 768w, image-1024.webp 1024w" alt="alt" titile="title"/> Так как webp не поддерживается некоторыми браузерами, было решено использовать решение WebPJS.
      Теперь есть следующая проблема: решение заменяет атрибут src, но не трогает srcset. То есть изображения остаются неизменными и не отображаются.
      Есть следующая идея, но я, полагаю, это будет очень затратно в плане ресурсов, а также неизвестно, как это будет влиять на SEO (может, спасут теги <nofollow>?).
      Распарсить атрибут srcset Создать столько img-элементов, сколько указано изображений в атрибуте Зацепить у каждого измененный атрибут src Составить новый атрибут srcset и заменить его на первом img Остальные img будут помещены под тег nofollow с классом display:none; Пока описывал решение, подумал, что, возможно, это плохое решение в том плане, что тогда у меня возрастет количество запросов на сервер как раз на количество новосозданных img-элементов. Но не уверен, так ли это.
    • By Stojan
      Уважаемые форумчане!
      Просьба помочь со скриптом.
      Краткая информация о скрипте:
      1. Скрипт генерит 5 элементов img и добавляет их в один из двух пустых div.
      2. Скрипт копирует все элементы из одного div в другой, при этом удаляя один элемент img. Получаем 5 и 4 элемента img в двух div.
      До этого момента все гладко.

      Далее скрипт должен при нажатии на lastChild левого div, которым является один из img удалять всех child из обоих div и генерить уже 10 и 9 соответственно (по схеме выше).

      Или, при нажатии на любой другой child в div кроме последнего, выдавать сообщение. 

      Вот проблема заключается в том, что не получается прописать событие onclick на последнем child'e одного из div, чтобы произошел вызов функции.

      Заранее благодарю за помощь.

      Это проблемный участок скрипта:
      """"
      theLeftSide.lastChild.onclick= function nextLevel(){
      // onclick.stopPropagation();
      numberOfFaces += 5;
      //delete all childNodes
      while(theBody.firstChild){theBody.removeChild(theB ody.firstChild);
      generateFaces();
      }}

      """"
       
      Весь скрипт:
      <!doctype html>
      <html>
      <head>
      <style>
      #rightSide { left: 500px;
                  border-left: 2px solid black;
                  width:500px; height:500px;
                  position:absolute ;}
      #leftSide {width:500px; height:500px;position:absolute;}
      img{position:absolute;}
      </style>
      <meta charset="utf-8">
      <title>Matching Game</title>
      <script>
      numberOfFaces =5;
      theLeftSide=document.getElementById("leftSide");
      theRightSide =document.getElementById("rightSide");
      theBody = document.getElementsByTagName("body")[0];
       
       
      function generateFaces() {
      //1st   for(i=1;i<=numberOfFaces;i++){
      //2nd
          var     i=1;
          while(i<=numberOfFaces){
      // 
      var image=document.createElement("img");
          image.src="smile.png";
          image.style.top=Math.floor(Math.random()*401)+"px";
          image.style.left=Math.floor(Math.random()*401)+"px";
          leftSide.appendChild(image);
          i++;
      }
      var leftSideImages = leftSide.cloneNode(true);
      leftSideImages.removeChild(leftSideImages.lastChild);
      rightSide.appendChild(leftSideImages);
      //part3 end
       
      }
       
      theLeftSide.lastChild.onclick= function nextLevel(){
           // onclick.stopPropagation();
           numberOfFaces += 5;
      //delete all childNodes
      while(theBody.firstChild){theBody.removeChild(theBody.firstChild);
      generateFaces();
      }
      }
      theBody.onclick = function gameOver() {
          alert("Game Over!");
          theBody.onclick = null;
          theLeftSide.lastChild.onclick = null;
      }
      </script>
      </head>
      <body onLoad="generateFaces()">
      <h1>Matching Game</h1>
      <p>Click on the extra smiling face on the left.</p>
      <div id="leftSide"></div>
      <div id="rightSide"></div>
      </body>
      </html>
       
    • By npofopr
      Я тут про адаптивный дизайн...
      Как вы делаете такую штуку:
      есть элемент .block-item, на 1024 он расположен внутри .header, а при 768px, этот блок переходит в .footer, ну т.е. в совсем другое место.
       
      Думаю не редко такое видели, в макетах.
      Вот и хочется услышать, как такое делается? 
      Понятно конечно, что самое просто это дублировать :-) Т.е. делать 2 элемента, и там и там, и менять у них display: block на none и обратно, но это же не кошерно.
       
      Может скрипты какие то есть, для таких манипуляций? А может у jquery есть что то встроенное, решающее этот вопрос двумя строчками? :-)
      Нашел вот такую штуку intentionjs, но на сколько я понял, там то же самое дублирование. Хотя может я не просек фишку.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy