CZĘŚĆ A:HTML5 Type Detection i Plugin Inicjalizacja
Wiem, że istnieje wiele rzeczy, które obecnie nie powiedzą Ci czy przeglądarka obsługuje pewną cechę HTML5, na przykład http://diveintohtml5.info/detect.html, ale don” t powiedzieć, jak uzyskać typ z poszczególnych elementów i użyć tych informacji, aby zainicjować wtyczki.
Tak próbowałem:
alert($("input:date"));
//returns "[object Object]"
alert($("input[type='date']"));
//returns "[object Object]"
alert($("input").attr("type"));
//returns "text" ... which is a lie. it should have been "date"
Brak tych pracował.
I w końcu wpadł na to (to działa):
var inputAttr = $('<div>').append($(this).clone()).remove().html().toLowerCase();
alert(inputAttr);
// returns "<input min="-365" max="365" type="date">"
podziękowań: http://jquery-howto.blogspot.com/2009/02/how-to-get-full-html-string-including.html
więc moje pierwsze pytanie: 1. Dlaczego nie mogę odczytać atrybut "Typ" w przeglądarkach, które nie obsługują html5? Możesz wymyślić dowolny inny atrybut i fałszywą wartość i przeczytać go. 2. Dlaczego moje rozwiązanie działa? Dlaczego ma to znaczenie, jeśli jest w DOM, czy nie?
CZĘŚĆ B:
Poniżej jest podstawowym przykładem tego, co używam detektor dla:
<script type="text/javascript" >
$(function() {
var tM = document.createElement("input");
tM.setAttribute("type", "date");
if (tM.type == "text") {
alert("No date type support on a browser level. Start adding date, week, month, and time fallbacks");
// Thanks: http://diveintohtml5.ep.io/detect.html
$("input").each(function() {
// If we read the type attribute directly from the DOM (some browsers) will return unknown attributes as text (like the first detection). Making a clone allows me to read the input as a clone in a variable. I don't know why.
var inputAttr = $('<div>').append($(this).clone()).remove().html().toLowerCase();
alert(inputAttr);
if (inputAttr.indexOf("month") !== -1)
{
//get HTML5 attributes from element
var tMmindate = $(this).attr('min');
var tMmaxdate = $(this).attr('max');
//add datepicker with attributes support and no animation (so we can use -ms-filter gradients for ie)
$(this).datepick({
renderer: $.datepick.weekOfYearRenderer,
onShow: $.datepick.monthOnly,
minDate: tMmindate,
maxDate: tMmaxdate,
dateFormat: 'yyyy-mm',
showAnim: ''});
}
else
{
$(this).css('border', '5px solid red');
// test for more input types and apply init to them
}
});
}
});
</script>
żywo przykład: http://joelcrawfordsmith.com/sandbox/html5-type-detection.html
I przysługę/pytanie: Can Czy ktoś pomógł mi odciąć trochę tłuszczu w moim fixerze typu HTML5?
mam funkcjonalność w dół (dodaje fallbacks do IE6-IE8 i FF z obecnie dodawania klas init off)
Czy istnieją bardziej efektywne metody iteracji nad DOM dla typów wejść tajemnica? I czy powinienem używać If If, lub funkcji, lub przypadku w moim przykładzie?
Dzięki wszystkim,
Joel
Och, oczywiście! Nie chcę sugerować, że atrybut typu nie jest prawdziwy. Pytałem, dlaczego nie można zwrócić wartości typu w taki sam sposób, w jaki można zwrócić utworzony atrybut. –
Myślałem o dodaniu klasy, ale chciałem mieć awarię, która była kompleksowa. –