2009-08-12 2 views

ответ

5

.html() собирается вернуть innerHTML - который будет включать в себя какие-либо метки А внутри, вы можете быть в состоянии сделать что-то подобное, хотя:

// clone the matched div: 
var copy = winner.clone(); 
// remove all A tags from the DOM 
copy.find("a").remove(); 
// get the html. 
var noanchors = copy.html(); 

Также - Если вы хотите, чтобы получить текст в A до сих пор - но не сама а - вы можете использовать:

// for each A tag 
copy.find("a").each(function() { 
    //insert the text within ourselves to the document directly before us. 
    $(this).before($(this).text()); 
    // then delete ourselves 
    $(this).remove(); 
}); 

Хотя это действительно может получить немного грязный, если <a> имеет какие-либо другие теги внутри него - он должен проиллюстрировать эту идею.

+0

Спасибо, clone() совершенен в этой ситуации. Почему я не подумал об этом? И для вашего второго кодового блока это полезно для следующего бит логики, который мне нужно написать. –

0

Возможно, но это не даст вам ожидаемого результата. not('a') будет фильтровать a теги из вашей коллекции winner, но html() вернет вам значение первого элемента в коллекции.

так что если ваш winner имеет [div#i1 div#i2 a div#i3 a], not('a') уменьшит этот набор для [div#i1 div#i2 div#i3] и html() будет возвращать содержимое HTML из div#i1.

Если вы хотите удалить привязки из HTML, я думаю, что вы должны сначала получить метод .html(), а затем выполнить замену на значение, возвращаемое с помощью некоторого регулярного выражения, которое будет лишать привязки.

0

В качестве альтернативы, вы можете использовать что-то вроде этого:

var noanchors = ''; 
winner.not('a').each(function() { noanchors = noanchors + $(this).html();) 

получить конкатенацию из HTML не-А элементов. Однако это может пропустить любой текст верхнего уровня между различными тегами, заключенными в теги.