2016-11-02 57 views
-2

使用文檔命令有一些不存在的時間。相反,像文檔中包含或分成一類,如果語句是有可能使控制成一行,並使用控制的,如果命令不存在採取NA是這樣的:防止未定義成一行代碼

document.querySelector('div#name span.fn').textContent || "NA"; 
+2

對我來說,這是絕對清楚你的意思:) –

回答

1

你可以這樣做這樣的:

(document.querySelector('div#name span.fn') || {}).textContent || "NA";

如果querySelector調用求空,它會返回對象,這不會有textContent,所以它會返回NA

+4

當然,你永遠不應該寫代碼那樣,永遠。這是完全不可讀的,並且會延長或維持一個痛苦。 –

+2

這回答了這個問題,但我同意@FrédéricHamidi認爲這很醜。把這樣的東西分解成多行可讀代碼是毫無恥的。 –

+0

這不是最乾淨的,但「完全無法讀取,會延長或維持疼痛」只是愚蠢而誇張。 –

0

創建一個這樣的功能。

function getTextContentOrDefault(selector, defaultValue) { 
 
    var element = document.querySelector(selector); 
 
    if (!element) return defaultValue; 
 
    if (!element.textContent) return defaultValue; 
 
    return element.textContent; 
 
} 
 

 
getTextContentOrDefault('div#name span.fn', 'NA');

+0

這不回答這個問題。這個問題明確要求以單一的方式來完成。 –

+1

是的,它的確如此。把函數放在一個庫中,並且你有可重用的邏輯,可以用一行來調用。我認爲,假設像這樣的邏輯將被多次使用是公平的。如果您只按照要求回答問題,而沒有提出可能更好的替代方案,那麼您正在對原始海報和更廣泛的社區進行破壞。 –

+0

如果是這種情況,那麼我可以在一行中寫入任何東西,方法是將其封裝在一個函數中。它打敗了這個問題的目的。 –