2013-08-01 3 views
4

У меня есть событие onerror, которое фиксирует URL-адрес & номера исключения. Теперь мне нужно извлечь HTML-код элемента из номера строки. Как я могу найти DOM и получить контент на этом конкретном номере?Получить элемент, просмотрев его номер строки

+1

Это будет почти невозможно сделать, поскольку это полностью зависит от интерпретатора в браузере. Большинство встроенных инструментов контроля DOM даже не могут получить правильный номер строки. –

+0

Попробуйте htmlLines = html.split ("\ n"); htmlLines [lineNumber] - это то, что вы ищете где html - полное содержание URL. – vipulsharma

ответ

4

Комментарий Рори почти правый. Это не обязательно невозможно, но получение чего-то, что работает, будет полным взломом. Вот почему:

Когда вы получаете HTML-страницу своей страницы с document.documentElement.outerHTML, вы начинаете работать с проблемами форматирования, потому что разные браузеры обрабатывают пустое пространство по-разному. Рассмотрим следующую страницу:

<html> 
    <head> 
     <title>Test Get HTML by Line Number</title> 
     <script type="text/javascript"> 
      window.onload = function() 
      { 
       var lines = document.documentElement.outerHTML; 
       console.log(lines); 
      }; 
     </script> 
    </head> 
    <body> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet venenatis metus. Sed lobortis semper nisl, 
     eget mollis nisl rutrum sed. Duis iaculis pharetra eros, eget imperdiet felis aliquet non. Aliquam non viverra eros, vitae 
     malesuada lacus. Sed ligula sapien, volutpat id diam ac, bibendum imperdiet lacus. Proin turpis lorem, blandit nec pretium 
     in, lobortis eu erat. Cras ultrices sapien nec quam luctus, nec dictum ante semper.</p> 
    </body> 
</html> 

В Chrome и Firefox, результат в Javascript консоли выглядит следующим образом:

<html><head> 
     <title>Test Get HTML by Line Number</title> 
     <script type="text/javascript"> 
      window.onload = function() 
      { 
       var lines = document.documentElement.outerHTML; 
       console.log(lines); 
      }; 
     </script> 
    </head> 
    <body> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet venenatis metus. Sed lobortis semper nisl, 
     eget mollis nisl rutrum sed. Duis iaculis pharetra eros, eget imperdiet felis aliquet non. Aliquam non viverra eros, vitae 
     malesuada lacus. Sed ligula sapien, volutpat id diam ac, bibendum imperdiet lacus. Proin turpis lorem, blandit nec pretium 
     in, lobortis eu erat. Cras ultrices sapien nec quam luctus, nec dictum ante semper.</p> 

</body></html> 

Но в IE, это выглядит следующим образом:

<HTML><HEAD><TITLE>Test Get HTML by Line Number</TITLE> 
<SCRIPT type=text/javascript> 
      window.onload = function() 
      { 
       var lines = document.documentElement.outerHTML; 
       console.log(lines); 
      }; 
     </SCRIPT> 
</HEAD> 
<BODY> 
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet venenatis metus. Sed lobortis semper nisl, eget mollis nisl rutrum sed. Duis iaculis pharetra eros, eget imperdiet felis aliquet non. Aliquam non viverra eros, vitae malesuada lacus. Sed ligula sapien, volutpat id diam ac, bibendum imperdiet lacus. Proin turpis lorem, blandit nec pretium in, lobortis eu erat. Cras ultrices sapien nec quam luctus, nec dictum ante semper.</P></BODY></HTML> 

Я могу думать о чем-то, что может дать вам результаты, которые вы хотите, но Я думаю, что это действительно взломанный; поэтому я гонг, чтобы рекомендовать вам не сделать это, и я не собираюсь вылить тонну усилий в него:

  1. Дубликат всю страницу, с самого начала HTML тега в HTML заканчивающегося тег последнего комментария на странице, как это:

    <html> 
        <head> 
         <title>Test Get HTML by Line Number</title> 
        </head> 
        <body> 
         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet venenatis metus. Sed lobortis semper nisl, 
         eget mollis nisl rutrum sed. Duis iaculis pharetra eros, eget imperdiet felis aliquet non. Aliquam non viverra eros, vitae 
         malesuada lacus. Sed ligula sapien, volutpat id diam ac, bibendum imperdiet lacus. Proin turpis lorem, blandit nec pretium 
         in, lobortis eu erat. Cras ultrices sapien nec quam luctus, nec dictum ante semper.</p> 
        </body> 
    </html> 
    <!-- 
    <html> 
        <head> 
         <title>Test Get HTML by Line Number</title> 
        </head> 
        <body> 
         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet venenatis metus. Sed lobortis semper nisl, 
         eget mollis nisl rutrum sed. Duis iaculis pharetra eros, eget imperdiet felis aliquet non. Aliquam non viverra eros, vitae 
         malesuada lacus. Sed ligula sapien, volutpat id diam ac, bibendum imperdiet lacus. Proin turpis lorem, blandit nec pretium 
         in, lobortis eu erat. Cras ultrices sapien nec quam luctus, nec dictum ante semper.</p> 
        </body> 
    </html> 
    --> 
    
  2. Получить содержимое последнего комментария (это должно помочь: Get text inside HTML comment tag?). Когда я попробовал Fiddle в принятом ответе, он предоставил правильно отформатированные пробелы в Chrome, Firefox и IE.

  3. Разделить результат на новой строки ("\ п")

  4. Посмотрите на свой номер строки, и вуаля! Вот так.

Так, как я уже предупреждал. Это «решение» раздувает ваш HTML и является полным взломом. Но это единственный способ, которым я могу думать, что у него будет шанс сохранить пустое пространство и позволить вам найти точный номер строки, который вы хотите.

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

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