如何从未知类型元素中获取jquery中的值

时间:2010-11-09 12:04:04

标签: jquery

在我的页面中,我想获得div或文本框的值。

在两种不同的条件下,他可以是div和textbox,这是肯定的

当我确定它只是div或文本框但不确定它是div还是文本框时,我怎么能得到div或textbox的值。

任何方法都可以帮助我获得价值,即使他是div或文本框。

4 个答案:

答案 0 :(得分:2)

var $el = $('#element'),
    value = $el.val() || $el.text();

如果未定义.val(),则第二行将使用.text()。

答案 1 :(得分:1)

One solution将使用.is(':text') filter + selector

var elm = $('divOrInput'),
    text = '';
if (elm.is(':text')) {
    text = elm.val();
} else {
    text = elm.text();
}

或者,浓缩:

var elm = $('divOrInput');
var text = elm.is(':text') ? elm.val() : elm.text();

修改

我的previous "solution" 没有工作!或者,它确实如此,但那是因为.text()也适用于<textarea>如果 OP正在讨论<textarea>,请在两者上使用.text()。另一方面,如果OP正在谈论<input type="text" ... /><div>,则可以使用此处提供的解决方案。

答案 2 :(得分:0)

html函数适用于textareas和div:

<div id="myDiv">some text</div>
<textarea id="myTextarea">some more text</textarea>

$('#myDiv').html(); // works
$('#myTextarea').html(); // works

这意味着您可以在不知道元素属于哪种元素的情况下使用.html()


修改

如果您的意思是inputdiv,则可以使用nodeName属性:

<div id="textbox">some text</div>
<input type="text" id="textbox" value="some more text">

这个jQuery将为您提供以下结果:

var $el = $('#textbox'),
    content;

content = ($el[0].nodeName.toLowerCase() == 'div') ? $el.html() : $el.val();

答案 3 :(得分:0)

检查tagName。 HTML:

<div class="foo">This is div content.</div>
<textarea class="foo">This is textarea content.</textarea>

JavaScript的:

console.log( $('.foo:first')[0].tagName.toLowerCase() );
console.log( $('.foo:last')[0].tagName.toLowerCase() );

这是jsfiddle


我一直在弄乱小提琴,结果是this

$.fn.footext = function() {
    var tagName = $(this)[0].tagName.toLowerCase();

    if (tagName == 'div') {
        return $(this).text();
    } else if (tagName == 'textarea') {
        return $(this).val();
    } else {
        return null;
    }
};

console.log($('.foo:first').footext());
console.log($('.foo:last').footext());