2010-02-10 20 views
31

क्या कोई तत्व माता-पिता की जांच करने और सीएसएस पृष्ठभूमि सेट वाले पहले व्यक्ति को ढूंढने का कोई तरीका है और फिर उस पृष्ठभूमि मूल्य को वापस कर दें?jQuery: जांचें कि तत्व में सीएसएस विशेषता है

कुछ की तरह:

var background = $('element').parents().has(css('background')); 

अद्यतन:

jQuery.fn.getBg = function(){ 
    var newBackground = this.parents().filter(function() { 
     return $(this).css('background-color').length > 0; 
    }).eq(0).css('background-color'); 
    $(this).css('background-color',newBackground); console.log("new background is: "+newBackground); 
}; 

उत्तर

45

यह सेट नहीं है, तो मिलता है, प्राप्त करने में कठिनाई इसे रिक्त स्ट्रिंग निकलेगा के लिए जाँच होगी। इसलिए  

var bg = ('element').parents().filter(function() { 
    return $(this).css('background').length > 0; 
}).eq(0) 

संपादित

कुछ शोध से पता चलता है कि css('background')हमेशा होगा कोई रिक्त स्ट्रिंग उत्पन्न करते हैं, या undefined, ब्राउज़र के आधार पर। css('background-color') सही ढंग से तत्व का रंग वापस कर देगा; लेकिन प्रत्येक ब्राउज़र के लिए अलग-अलग मान भी हैं, इसलिए परीक्षण में परेशानी है (transparent आईई, rgba(0,0,0,0) फ़ायरफ़ॉक्स/क्रोम में, उदाहरण के लिए, दोनों पारदर्शी निर्दिष्ट करने के सटीक तरीके हैं)।

jQuery.fn.getBg = function() { 
    return $(this).parents().filter(function() { 
     // only checking for IE and Firefox/Chrome. add values as cross-browser compatibility is required 
     var color = $(this).css('background-color'); 
     return color != 'transparent' && color != 'rgba(0, 0, 0, 0)'; 
    }).eq(0).css('background-color'); 
}; 
+0

शानदार समाधान +1 –

+0

फ़ंक्शन (x) में वास्तव में 'x' क्या कर रहा है? क्या यह प्लेसहोल्डर है या वास्तव में इसका इस्तेमाल किसी चीज़ के लिए किया जा रहा है? – adamyonk

+0

इसे आज़माएं: अगर ('') अलर्ट ("खाली स्ट्रिंग सत्य है!"); - आप भी "सच्चाई" मूल्य को बूलियन के साथ परिवर्तित कर सकते हैं !! – Pointy

9

मेरा मानना ​​है कि ऐसा करने के लिए सही तरीका .length संपत्ति की जांच करने के लिए है: इस कोड को मैं अब का उपयोग कर रहा है।

आपके मामले में आप अपने सभी तत्वों के माध्यम से लूप करना चाहते हैं और पहले एक है कि

.css('background').length != 0 
+0

@ डेविड का जवाब बेहतर है, जहां तक ​​लंबाई के बजाय बूलियन के रूप में उपयोग किया जाता है, लेकिन इसे +1 करना था ... पहला जवाब जो काम करेगा और कुछ प्रतिनिधि बिंदुओं की आवश्यकता होगी। – sberry

5
$('selector').parents().filter(function() { return !!$(this).css('background'); }); 
+3

आखिर में एक अच्छा उपयोग !! नोटेशन +1 –

+0

जावास्क्रिप्ट में एक खाली स्ट्रिंग गलत है, आपको पता है। – Pointy

+0

@ गैबी ओह मैं देखता हूं कि आपका मतलब गैबी था; कोई बात नहीं! और वोट के लिए धन्यवाद! – Pointy

2

मैं कुछ इस तरह की कोशिश करेंगे:

var background = 0; 
$('element').parents().each(function() { 
    if (!background && ((e = $(this).css('background')).length > 0)) background = e; 
}); 

सुनिश्चित नहीं हैं कि अगर यह सही है, तो-खंड में काम करता है, लेकिन प्रत्येक() चाल करना चाहिए। पहला मैच बैकग्राउंड वैरिएबल भर देगा और श्रृंखला में घुसपैठ करते समय बाकी माता-पिता को अनदेखा करेगा।

संपादित करें: सही ढंग से css('background') को हल करने में रिक्त स्ट्रिंग फेंकना सकता है जो संशोधित। इसके अतिरिक्त, each() तत्व को पास नहीं करता है, लेकिन सूचकांक और तत्व, इस प्रकार this का उपयोग करते हैं और सभी मानकों को त्याग देते हैं।

-6

आप की तरह कुछ कर सकता है:

$('#test').parents().has(css('background')).filter(':first'); 

आशा है कि यह मदद करता है:)

+0

सीएसएस jQuery संदर्भ से बाहर एक समारोह नहीं है। – Derrick

+0

डेरिक के साथ सहमत हैं, उस पर .has() फ़ंक्शन एक तत्व चयनकर्ता को इसके सर्वो के रूप में लेता है। – JoseMarmolejos

1

पुनः प्राप्त तत्व पृष्ठभूमि रंग या ढाल

के रूप में मैं तत्वों के लिए एक पृष्ठभूमि लागू करने के लिए कोशिश कर रहा था कि मैं इस में आए उसमें पहले से ही एक (पृष्ठभूमि ढाल या रंग) नहीं था।

इस समारोह पृष्ठभूमि ढाल या पृष्ठभूमि रंग का मान देता है, तो आप इसे और झूठे लौटाता है यदि ऐसा नहीं होता है: आप बस अगर एक तत्व एक पृष्ठभूमि है परीक्षण करना चाहते हैं, तो

jQuery.fn.getBg = function() { 
    var color = $(this).css('background-color'); 
    var image = $(this).css('background-image'); 

    if (color != 'transparent' && color != 'rgba(0, 0, 0, 0)') { 
    return color; 
    } 
    if (image != 'none') { 
    return image; 
    } 
    return false; 
}; 

अब, आप ऊपर फ़ंक्शन का उपयोग कर सकते हैं:

var curBack = $(this).getBg(); 
if (curBack) { /* Element has a background */ } 
else { /* Element doesn't have a background */ } 

उम्मीद है कि इस में किसी को ढ़ाल के साथ काम करने के लिए कुछ हद तक साधन संपन्न है।

संबंधित मुद्दे