2010-09-23 14 views
3

J'ai un document HTML et je dois examiner, si un attribut est présenté dans l'élément en questionhas_attribute? problème

On suppose, que l'attribut n'est pas présenté.

Quand je dis:

elem.has_attribute? "data-attr" 

retourne zéro au lieu de "faux".

Quand je dis:

elem["data-attr"].nil? 

retourne "true", c'est-ce que je dois.

Mais, quand je dis:

!elem["data-attr"].nil? 

il à nouveau nul retour précis ou chiffré.

Quand je dis:

r = elem["data-attr"].nil? 
r = !r 

r obtient "true" après la première ligne est exécutée

mais, après la deuxième ligne, "r" devient nulle à nouveau

Qu'est-ce que la magie derrière ?

+0

drôle - il semble être documenté "renvoie true si l'attribut est présent", mais ne dit rien sur l'absence d'attribut. Parlez de la documentation complète :( – xtofl

+0

xtofl, Qu'est-ce que le document lisez-vous? Je regarde ce "http://nokogiri.org/Nokogiri/XML/Node.html#method-i-get_attribute", mais il n'y a pas explication de cette méthode – AntonAL

+0

http://api.rubyonrails.org/classes/ActiveRecord/Base.html Mais basé sur la documentation de Hash sous-jacente, ils ne peuvent pas faire mieux :) – xtofl

Répondre

1

Pourquoi ne pas utiliser:

elem["data-attr"].present? 

ou

elem["data-attr"].blank? 
1

Si

elem["data-attr"].nil? 

renvoie true, pourquoi ne pas vous attendre à

!elem["data-attr"].nil? 

retourner nul?

+1

Parce que si elem ["data-attr"] .nil? est vrai,! true est faux? –

+1

Oui, mais ils ont tous les deux une fausseté. –

+0

Ils ont tous les deux une fausseté, mais c'est inconsistant: '! Nil.nil? # => false' –