2010-10-16 6 views
3

Я ищу способ получить смещение относительно всего документа для данного узла с помощью Javascript. Например .:Получить смещение узла в целом HTML-документ в Javascript?

<html> 
    <head></head> 
    <body> 
     <div id="mainContent"> 
      <h1 id="myTitle">Title</h1> 
      <p>First paragraph</p> 
      <p>Second <b>paragraph</b></p> 
     </div> 
    </body> 
</html> 

Тогда (с помощью JQuery):

$("#myTitle").getDocumentOffset() 

должен вернуть 47, потому что h1 с идентификатором myTitle начинается со смещения 47 в символах по отношению ко всему документу.

Любая идея, как это сделать?

Заранее спасибо.

ответ

7

Этот вопрос не имеет смысла, поскольку лишние пробелы игнорируются в документах HTML, и поэтому одна и та же страница может быть представлена ​​несколькими способами. Например, это:

<html> 
    <body></body> 
</html> 

эквивалентно следующему:

<html><body></body></html> 

Кроме того, после того, как браузер проанализирован код, нет никакого способа, чтобы получить исходный HTML-разметку (с тем же пробелами) который присутствовал в исходном файле. Это означает, что «смещение», которое вы ищете, не определено однозначно.

+0

Невозможно ли получить unparsed HTML? Если да, можно ли получить смещение обрезанного тела? (только подсчет из тела, без пробелов, кроме пробелов) - Обновление: когда я записываю $ ('html'). html(), пробелы, похоже, зарезервированы. Например. когда я добавляю 5 вкладок, это показывает эти 5 вкладок. Он также показывает Javascript и т. Д. – Tom

+0

Или лучше: $ (document) .children(). Html() – Tom

+0

@Tom: Нет гарантии, что он будет работать. Например, Firefox, похоже, сохраняет форматирование, в то время как IE и Chrome полоса пространства по своему вкусу. И получить смещение от «обрезанного тела» непросто: вам, по сути, нужно написать собственный парсер DOM. – casablanca