jquery - 希望从呈现两种方式的页面中获取值(查看和编辑)

时间:2012-09-27 23:38:47

标签: jquery jquery-selectors

(jquery新手警报!)

我正在尝试使用JQuery / javascript从文本字段中获取值,然后检查它是否> 14天。我的问题是页面(和我的字段的HTML)是不同的,具体取决于应用程序/页面是处于“编辑”模式还是处于“查看”模式。

是否可以编写一个选择器来获取包含在跨度内的val,无论它是在输入字段内还是仅仅是跨度内的文本?例如,可以通过span()。val()获取值吗?我正在努力,但到目前为止还没有成功。

以下是HTML代码段:

编辑模式:

<td class="m1234Bottom" style="width:35%;">
    <span id="ABC123" class="Datetime">
    <div class="dateElement" id="ABC188c">
        <input name="ABC$123ccc"
           type="text">
        <a class="date"></a>
        <a style="display: none;" class="time"></a>
    </div>
    </span>
</td>

查看模式:

<td class="m1234Bottom" style="width:35%;">
    <span id="ABC123">
        12/23/2012
    </span>
</td>

我可以通过以下方式获取'edit'值:

$("input[name*='123ccc']".each(function() {
    var outv= $(this).val();
    alert(outv);
});

是否有更好的JQuery可以在编辑或查看代码中找到该值?

很抱歉,如果选择/ each / this.val链接让你感到畏缩。我第一次探索jquery只需几个小时。随意嘲笑或指出更好的方法;我甚至不需要解释 - 我可以RTFWebDoc。但是,如果有人没有干预,我会坚持通过javascript这样做:接下来将是一个讨厌的if / then代码块,然后另外几个小时的试错和stackoverflow-读取来学习jquery错误检查null-值,然后在我最终达到目标之前重新发现javascript的字符串到日期函数:'这个日期&gt; 14天了吗?'

谢谢,

4 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望获得span id#ABC123的文本值或名称为ABC $ 123ccc的输入值。

在这种情况下,根据您提供的代码段,您可以尝试以下方式:

var span = $('#ABC123');

//check if span has input child
if (span.find('input').length > 0) {
    //get value from input field
    var date = span.find('input').val();
}
else {
    //get text date from the span
    var date = span.text();
}

答案 1 :(得分:1)

$(function() {
    $('#ABC123').find('input').length > 0 ? value = $('#ABC123').find('input').val() : value = $('#ABC123').text();
    console.log(value);
});​

jsFiddle:http://jsfiddle.net/63QF6/41/

在小提琴中,将范围ID中的一个更改为#ABC123之外的任何内容,以模仿更改视图。

答案 2 :(得分:0)

不幸的是,你不能对span使用val()函数。根据JQuery网站的定义:

.val()方法主要用于获取表单元素的值,例如input,select和textarea。

如果要检索跨度的值,则应使用.text()或.html(),因为跨度的内容不是“值”,而是跨度的内容(跨度coulb包含其他内容)节点,与输入不同。)

但你可以创造一个独特的功能,如:

function retrieveValue()
{
    // Retrieve the element (not guess yet)
    var spanOrInput = $("#ABCD123");

    // Try to guess if its an input or a span
    var type = spanOrInput.attr('type');
    if (typeof type == "undefined" || !type)
        return spanOrInput.val();
    else
        return spanOrInput.html();
}

答案 3 :(得分:-1)

你有什么理由不能这样做:

<input type="hidden" id="hidtype" />

然后基于天气它是视图模式或编辑模式存储,然后,在这个隐藏的字段,

 $(function(){
     if ($('#hidtype').val() == '1') {   //or what ever you use to set state
     // code here for that mode
     }
     else{
    // code for other type of mode
     }     
 });

如果你坚持这样做,你可以检查输入是否像这样存在

if( $('#ABC123 input').length ) {
//this means the input exists - handle from here
}