Mam listę rozwijaną, która jest wypełniona przez Javascript.
Decydując o tym, jaka powinna być domyślna wartość do wyświetlenia podczas ładowania, zdałem sobie sprawę, że następujące właściwości pokazują dokładnie te same wartości:
innerText
innerHtml
label
text
textContent
outerText
Moje własne badania pokazują testy benchmarkingowe lub porównania kilku z nich, ale nie wszystkich.
Mogę użyć własnego zdrowego rozsądku i wybrać 1 lub inny, ponieważ dają one ten sam wynik, ale obawiam się, że nie będzie to dobry pomysł, jeśli dane miałyby się zmienić.
Moje ustalenia są następujące:
innerText
pokaże wartość taką jaka jest i zignoruje jakiekolwiek formatowanie HTML, które może być zawarteinnerHTML
pokaże wartość i zastosuje formatowanie HTMLlabel
wydaje się być taki sam jakinnerText
, więc nie widzę różnicytext
wydaje się być tym samym,innerText
ale wersja skrócona jQuerytextContent
wygląda tak samo jak,innerText
ale zachowuje formatowanie (takie jak\n
)outerText
wydaje się być taki sam jakinnerText
Moje badania mogą doprowadzić mnie tylko do tego stopnia, że mogę tylko przetestować to, o czym myślę lub przeczytać, co zostało opublikowane, czy ktoś może jednak potwierdzić, czy moje badania są prawidłowe i czy jest coś specjalnego w label
i outerText
?
źródło
.text()
aby uzyskać zawartość tekstową elementu, ponieważ zapewni to maksymalne wsparcie dla różnych przeglądarek.Odpowiedzi:
Z MDN :
Więc
innerText
nie będzie zawierać tekstu, który jest ukryty przez CSS, aletextContent
będzie.W przypadku, gdy brakowało, że powtórzę to jaśniej: Do nie używać
.innerHTML
, chyba że wyraźnie zamiar wstawić w obrębie elementu HTML i podjęły niezbędne środki ostrożności w celu zapewnienia, że HTML wstawiasz nie może zawierać szkodliwą zawartość. Jeśli chcesz wstawić tylko tekst, użyj.textContent
lub jeśli potrzebujesz obsługiwać IE8 i starsze wersje, użyj wykrywania funkcji, aby wyłączyć między.textContent
a.innerText
.Głównym powodem, dla którego istnieje tak wiele różnych właściwości, jest to, że różne przeglądarki miały pierwotnie różne nazwy tych właściwości i nadal nie ma pełnej obsługi wszystkich przeglądarek dla nich wszystkich. Jeśli używasz jQuery, powinieneś się trzymać,
.text()
ponieważ jest to zaprojektowane tak, aby wygładzać różnice między przeglądarkami. *W przypadku niektórych innych:
outerHTML
jest w zasadzie taki sam jakinnerHTML
, z wyjątkiem tego, że zawiera znacznik początkowy i końcowy elementu, do którego należy. Nie mogę znaleźć żadnego opisuouterText
. Myślę, że jest to prawdopodobnie mało znana własność, której należy unikać.źródło
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
polega na tym, że textContent nie jest obsługiwany przez IE 8, który jest nadal w dość powszechnym użyciu, ponieważ jest to wersja dołączona do systemu Windows 7. A FireFox nie obsługuje innerText . Więc chociaż innerHTML nie jest idealnie dostosowana do tego celu, ma lepszą niezawodność w różnych przeglądarkach..textContent
i.innerText
, lub użyć czegoś takiego jak jQuery, które wyrównuje te różnice między przeglądarkami.textContent
z tagami HTML. Jeśli potrzebujesz wstawić HTML, użyjesz.innerHTML
lub zbudujesz węzły HTML za pomocądocument.createElement()
itp.innerHTML
(w przeciwieństwietextContent
) może otworzyć drzwi dla ataków XSS (Cross-Site Scripting) na twoją aplikację. Jeśli zawartość wstawiana do DOM za pośrednictweminnerHTML
nie jest w pełni zaufana, osoba atakująca może użyć<script>
elementu do przejęcia aplikacji uwierzytelnionej na poziomie autoryzacji użytkownika lub administratora. Wszystkie ataki, w tym dziwnie wyglądające ataki, jak<img src="x.x" onerror="alert('Hacked!');"/>
i niezliczone podstępne, są skutecznie niszczone przez proste użycietextContent
w tym kontekście zamiast niebezpiecznychinnerHTML
.Lista rozwijana zawiera zbiór
Option
obiektów, więc powinieneś użyć.text
właściwości do sprawdzenia tekstowej reprezentacji elementu, tj.Przy okazji,
To nie jest poprawne;
$(element).text()
jest wersją jQuery, a wersjąelement.text
dostępu do właściwości.źródło
Dodatek do znakomitej odpowiedzi JLRishe'a:
Przyczyną istnienia innerText i externalText jest symetria z innerHTML i externalHTML. Staje się to ważne podczas przypisywania do nieruchomości.
Załóżmy, że masz element
e
z kodem HTML<b>Lorem Ipsum</b>
:źródło
textContent
nie sformatuje (\ n)źródło
Sprawdź zgodność przeglądarek http://www.quirksmode.org/dom/html/, jeśli kierujesz reklamy na określone przeglądarki. Ponieważ wydaje się, że wszyscy mają swój własny sposób robienia rzeczy. Dlatego lepiej jest używać JQuery .text () ( http://api.jquery.com/text/ ), jeśli nie chcesz się bawić.
źródło
text
ilabel
usuń dodatkowe spacje. Otrzymałem następujące wyniki podczas sprawdzania opcji w menu rozwijanym:źródło