我如何确定HTML元素是否具有值,即使它为空?

时间:2018-10-30 16:37:23

标签: javascript jquery

我有一个元素可以存在:

map2.html

webbrowser

和我的代码需要知道该值是否存在以及该值是什么。我的代码可以在下面工作,但是由于我对元素进行了两次调用而感到困惑,对改进下面的代码有什么建议吗?

<input type="hidden" name="simple_search_criteria" id="simple_search_criteria" value="" />

我喜欢下面的代码,但是由于<input type="hidden" name="simple_search_criteria" id="simple_search_criteria"/> 在两种情况下都返回一个空字符串,所以它不起作用...

if ($('#simple_search_criteria').attr('value') !== undefined) {
  var searchCriteria = $('#simple_search_criteria').val();
  // Do stuff with searchCriteria, even if it is an empty string
}

任何改进将不胜感激,我一直在努力改善自己的js!

5 个答案:

答案 0 :(得分:3)

使用常规JavaScript会更快。尝试hasAttributegetElementById

var searchCriteria = document.getElementById('simple_search_criteria').hasAttribute('value');

答案 1 :(得分:1)

这个想法是要检查val()是否返回任何东西,如果是,则检查是否不存在空值。

要回复评论(已删除),例如,如果元素(此处对应于$('#simple_search_criteria'))不存在,则typeof将返回“ undefined”。 typeof的文档也可能有用。您可以看看here

var searchCriteria = $('#simple_search_criteria').val();
if (typeof(searchCriteria) !== 'undefined' and searchCriteria.length > 0) {
// do stuff with searchCriteria
}

答案 2 :(得分:1)

我不知道是否有一个用于检查属性是否存在的jquery助手,但是javascript本身具有hasAttribute方法。

   bool Button::longPush(unsigned long interval){
//      ^^^^^^^^

答案 3 :(得分:1)

在这种情况下,您可以使用typeof属性来区分未定义字符串和空字符串:

typeof(document.getElementById("simple_search_criteria"))==='string'; 

更多详细信息here

答案 4 :(得分:1)

input元素始终具有一个值,即使在标记中省略了其value属性,这也就是为什么.val()不能区分是否存在带有空值,并且缺少属性。至关重要的是,在两种情况下,您的表单都将使用相同的simple_search_criteria=(空字符串)数据提交,因此接收表单提交的服务器将无法区分两者。设计表单时,您需要牢记这一点。如果要忽略此参数,则需要完全忽略此特定的input元素,而不仅仅是其value属性。

但是,如果希望应用程序根据属性的存在或不存在来运行,则需要直接检查该属性。您可以通过将选择器缓存在单独的变量中来节省一些开销:

var searchCriteriaInput = $('#simple_search_criteria');
if (searchCriteriaInput.attr('value') !== undefined) {
  var searchCriteria = searchCriteriaInput.val();
  // Do stuff with searchCriteria, even if it is an empty string
}