SORU
12 NİSAN 2011, Salı


Nasıl olursa öğesi görünür DOM olup olmadığını kontrol etmek için?

Nasıl getElementById yöntemi kullanmadan varlığı için bir öğe test musun? Başvuru için live demo bir kurulum var. Ayrıca burada kod de baskı olacaktır:

<!DOCTYPE html>
<html>
<head>
    <script>
    var getRandomID = function (size) {
            var str = "",
                i = 0,
                chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
            while (i < size) {
                str  = chars.substr(Math.floor(Math.random() * 62), 1);
                i  ;
            }
            return str;
        },
        isNull = function (element) {
            var randomID = getRandomID(12),
                savedID = (element.id)? element.id : null;
            element.id = randomID;
            var foundElm = document.getElementById(randomID);
            element.removeAttribute('id');
            if (savedID !== null) {
                element.id = savedID;
            }
            return (foundElm) ? false : true;
        };
    window.onload = function () {
        var image = document.getElementById("demo");
        console.log('undefined', (typeof image === 'undefined') ? true : false); // false
        console.log('null', (image === null) ? true : false); // false
        console.log('find-by-id', isNull(image)); // false
        image.parentNode.removeChild(image);
        console.log('undefined', (typeof image === 'undefined') ? true : false); // false ~ should be true?
        console.log('null', (image === null) ? true : false); // false ~ should be true?
        console.log('find-by-id', isNull(image)); // true ~ correct but there must be a better way than this?
    };
    </script>
</head>
<body>
    <div id="demo"></div>
</body>
</html>

Yukarıdaki kod gösterir temelde bir eleman bir değişken içine saklanan ve daha sonra dom kaldırılır. Elemanın dom ' kaldırılmış olsa da, bu değişken ilk ilan ettiğinde olduğu gibi öğe korur. Diğer bir deyişle, elemanın kendisi, daha ziyade bir kopya için canlı bir referans değildir. Sonuç olarak, varlığı için değişken değeri (eleman) kontrol, beklenmedik bir sonuç sağlayacaktır.

isNull işlevi bir değişken unsurları bir varlığı için kontrol etmek için bir çabadır, ve o inşaat, ama aynı sonuca ulaşmak için daha kolay bir yolu varsa bilmek isterim.

Herhangi bir fikir için çok şimdiden teşekkür ederiz.

PS: ayrıca neden değişkenleri eğer herkes bazı iyi makaleler konu ile ilgili bilen varsa bu şekilde davranarak JavaScript. ilgileniyorum

CEVAP
12 NİSAN 2011, Salı


Bazı insanlar burada iniş ve bir öğe olup olmadığını bilmek istiyorum sadece görünüyorvar(biraz özgün soru için farklı).

Bu tarayıcı seçme yöntemi kullanarak, ve bunu kontrol kadar basittruthydeğer (genellikle).

Eğer benim eleman "find-me" id olsaydı örneğin, basitçe edebilirsin

var elementExists = document.getElementById("find-me");

Bu spec ya öğesi için bir başvuru döndürmek veya null olur. Eğer Boolean bir değer olmalıdır, sadece yöntem önce !! bir çağrı at.

Buna ek olarak, öğeleri bulma, (document kapalı yaşam) gibi: için mevcut olan pek çok diğer yöntemlerden bazılarını kullanabilirsiniz

  • querySelector()/querySelectorAll()
  • getElementsByClassName()
  • getElementsByName()

Bu yöntemlerden bazıları 16 ** NodeList bir nesne, ve bu nedenle, çünkü length özelliğini kontrol etmeyi unutmayın, bu yüzden geri dönmektruthy.


Eğer bir öğe görünür DOM (soru aslında sorduğun gibi), Csuwldcat provides a better solution than rolling your own bu cevap içermesi için kullanılan) bir parçası olarak var aslında eğer belirlemek için. Yani, DOM elemanları contains() yöntemini kullanın.

Bu gibi kullanmalısınız

document.contains(someReferenceToADomElement);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • sghaff1

    sghaff1

    23 Mart 2009
  • sknbp

    sknbp

    16 Kasım 2006