2

(jquery新手警报!)

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

是否可以编写一个选择器,将 val 包裹在 span 内,无论它是在输入字段内还是只是 span 内的文本?例如,可以通过 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>

我可以通过以下方式获得“编辑”值:

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

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

抱歉,如果该 selection/each/this.val 链接让您感到畏缩。我只是第一次探索 jquery 几个小时。随意嘲笑或指出更好的方法;我什至不需要解释——我可以使用 RTFWebDoc。但是如果有人不干预,我就只能通过 javascript 来做这件事:接下来将是一个讨厌的 if/then 代码块,然后再进行几个小时的试错和 stackoverflow-reading 来学习 jquery 错误检查 null-值,然后在我最终达到我的目标之前重新发现 javascript 的 string-to-date 函数:“这个日期是否 > 14 天?”

谢谢,

4

4 回答 4

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();
}
于 2012-09-27T23:55:09.307 回答
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 以外的任何内容以模拟更改视图。

于 2012-09-28T00:00:59.217 回答
0

不幸的是,您不能将 val() 函数用于 span。根据 JQuery 网站上的定义:

.val() 方法主要用于获取输入、选择和文本区域等表单元素的值。

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

但是您可以创建一个独特的功能,例如:

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();
}
于 2012-09-27T23:53:53.747 回答
-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
}
于 2012-09-27T23:53:17.877 回答