it-swarm.com.de

Wie kann ich den Elementtyp eines übereinstimmenden Elements in jQuery ermitteln?

Ich stelle ASP.Net-generierte Elemente anhand des ID-Namens ab, habe jedoch einige Elemente, die je nach Seitenkontext als Textfelder oder Beschriftungen dargestellt werden können. Ich muss herausfinden, ob die Übereinstimmung mit einem Textfeld oder einer Beschriftung besteht, um zu wissen, ob der Inhalt von val () oder von html () abgerufen werden soll.

$("[id$=" + endOfIdToMatch + "]").each(function () {
    //determine whether $(this) is a textbox or label
    //do stuff
});

Ich habe eine Lösung gefunden, die nicht funktioniert, sie gibt nur "undefined" zurück:

$("[id$=" + endOfIdToMatch + "]").each(function () {
    alert($(this).tagName);
});

Was vermisse ich?

71
CMPalmer

Nur eine Frage zu viel:

$("[id$=" + endOfIdToMatch + "]").each(function () {
    alert(this.tagName);
});
92
Tomalak

Betrachten Sie diese Lösung, ohne each () zu verwenden:

var elements = $("[id$=" + endOfIdToMatch + "]");
var vals = elements.is("input").val();
var htmls = elements.is("label").html();
var contents = vals.concat(htmls);

Schauen Sie sich die Dokumentation für is an.

32

sie könnten auch so etwas verwenden:

if ($(this).is('input:checkbox'))

ersetzen Sie "this" durch die Instanz, die Sie benötigen, und "Checkbox" durch den von Ihnen benötigten Eingabetyp.

24
Jelgab

Zum ersten Mal habe ich meine eigene Frage beantwortet. Nach etwas mehr Experimenten:

$("[id$=" + endOfIdToMatch + "]").each(function () {
   alert($(this).attr(tagName));
});

funktioniert!

6
CMPalmer

in jquery 1.6 use prop ()

Beispiel

var el = $('body');

if (el.prop('tagName') === 'BODY') {
    console.log('found body')
}
3
reco

tagName was für ein schöner Tipp. Ich möchte auch die Verwendung von tagName.toLowerCase () vorschlagen, da der zurückgegebene Wert vom Dokumenttyp (HTML oder XML/XHTML) abhängt.

Siehe: http://reference.sitepoint.com/javascript/Element/tagName

3
Martin Sarsini

Dies ist der beste Weg, um den Elementtyp abzurufen

function tgetelementType( elmentid )
{

    var TypeName = $('#' + elmentid).get(0).tagName;
    var TypeName2 = $('#' + elmentid).get(0).type;


    if($('#' + elmentid).get(0).tagName== "INPUT")
    {
       return $('#' + elmentid).get(0).type.toUpperCase()
    }
    else 
    {
        return $('#' + elmentid).get(0).tagName.toUpperCase() ; 
    }
}
1
Said
$("[id$=" + endOfIdToMatch + "]").each(function(){
    var $this=jQuery(this),ri='';
    switch (this.tagName.toLowerCase()){
        case 'label':
            ri=$this.html();
            break;
        case 'input':
            if($this.attr('type')==='text'){ri=$this.val();}
            break;
        default:
            break;
    }
    return ri;
})

Die Frage ist, was wollen Sie tun, nachdem Sie den Tagnamen bestimmt haben? Sie können die Jquery-Liste genauso einfach filtern, indem Sie einen zusätzlichen Selektor in Kombination mit .end () verwenden, um dasselbe zu tun:

$("[id$=" + endOfIdToMatch + "]")
    .find("input:text")
    .each(function(){
         /* do something with all input:text elements */
    })
    .end()
    .find("label")
    .each(function(){
        /* do something with label elements */
    })
    .end()

Dies könnte immer noch verkettet werden, wenn Sie weitere Elemente mit dieser bestimmten Elementkollektion ausführen müssen ... genau wie im obigen Beispiel.

In beiden Fällen müssen Sie etwas mit den Werten tun, wenn Sie sich in den each()-Anweisungen befinden

1
ProtectedVoid

Eine noch elegantere Lösung besteht darin, für jeden Elementtyp zwei separate Funktionen zu schreiben:

$("input#" + id).each(function() { alert(this + " is an input"); });
$("label#" + id).each(function() { alert(this + " is a label"); });
0
jevon