Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将所选div插入文本区域(光标位置)_Javascript_Jquery_Html - Fatal编程技术网

Javascript 将所选div插入文本区域(光标位置)

Javascript 将所选div插入文本区域(光标位置),javascript,jquery,html,Javascript,Jquery,Html,这是我的HTML <div class="suggestion-box col-sm-12"> <div class="col-sm-1 parantheses">(</div> <div class="col-sm-1 parantheses">)</div> </div> <br> <textarea class="entry-box col-sm-12" type="text">

这是我的HTML

<div class="suggestion-box col-sm-12">
    <div class="col-sm-1 parantheses">(</div>
    <div class="col-sm-1 parantheses">)</div>
</div>
<br>
 <textarea class="entry-box col-sm-12" type="text">temp<20 && hum<10</textarea>

如果我正确理解了您的需求,那么最初您的光标指针位于文本区域内的某个位置,现在当您单击括号时,它应该被放置在指针位置。 如果这是要求,那么就不可能实现这一点,因为当您在文本区域外单击时,您在范围内的焦点位置将刷新到其他位置,简单地说,您的光标一次只能在一个位置。因此,您需要修改您的需求。 我建议你用append

eg. abcd(append your parenthesis here "(" ) start text for paranthesis(" close your parenthesis here")" )

如果我正确理解了您的需求,那么最初您的光标指针位于文本区域内的某个位置,现在当您单击括号时,它应该被放置在指针位置。 如果这是要求,那么就不可能实现这一点,因为当您在文本区域外单击时,您在范围内的焦点位置将刷新到其他位置,简单地说,您的光标一次只能在一个位置。因此,您需要修改您的需求。 我建议你用append

eg. abcd(append your parenthesis here "(" ) start text for paranthesis(" close your parenthesis here")" )

请回复@Pankaj Makwana,并在这里发布您的最短代码,然后我们(至少我)将为您提供评论或反馈,甚至是正确的解决方案


线索:尝试在相关操作上使用绑定,例如
.click()
$(文档)。例如,在jquery的('click',el,function(){})
.text()
方法上。

请回答@Pankaj Makwana,并在此处发布您最不需要的代码,然后我们(至少我)将为您提供评论或反馈,甚至是一个正确的解决方案

提示:尝试在相关操作上使用绑定,例如
.click()
$(document).on('click',el,function(){})
,以及jquery的
.text()
方法。

这对我很有效:)感谢Pankaj提供的参考链接

function getCaret(el) {
    if (el.prop("selectionStart")) {
        return el.prop("selectionStart");
    } else if (document.selection) {
        el.focus();

        var r = document.selection.createRange();
        if (r == null) {
            return 0;
        }

        var re = el.createTextRange(),
            rc = re.duplicate();
        re.moveToBookmark(r.getBookmark());
        rc.setEndPoint('EndToStart', re);

        return rc.text.length;
    }
    return 0;
};

function appendAtCaret($target, caret, $value) {
    var value = $target.val();
    if (caret != value.length) {
        var startPos = $target.prop("selectionStart");
        var scrollTop = $target.scrollTop;
        $target.val(value.substring(0, caret) + ' ' + $value + ' ' + value.substring(caret, value.length));
        $target.prop("selectionStart", startPos + $value.length);
        $target.prop("selectionEnd", startPos + $value.length);
        $target.scrollTop = scrollTop;
    } else if (caret == 0) {
        $target.val($value + ' ' + value);
    } else {
        $target.val(value + ' ' + $value);
    }
};

$('textarea').each(function() {
    var $this = $(this);
    $this.click(function() {
        //get caret position
        var caret = getCaret($this);

        //append some text
        appendAtCaret($this, caret, 'Some text');
    });
});
<html>
<body>
<textarea id="txt" rows="15" cols="70">There is some text here.</textarea>
<input type="button" id="btn-open" value="(" />
<input type="button" id="btn-close" value=")" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


</body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>
 jQuery("#btn-open").on('click', function() {
 $("#txt").focus();
        var $txt = jQuery("#txt");
        var caretPos = $txt[0].selectionStart;
        var textAreaTxt = $txt.val();
        var txtToAdd = "(";
        $txt.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
    });
    jQuery("#btn-close").on('click', function() {
    $("#txt").focus();
        var $txt = jQuery("#txt");
        var caretPos = $txt[0].selectionStart;
        var textAreaTxt = $txt.val();
        var txtToAdd = ")";
        $txt.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
    });
    </script>
</html>

这里有一些文字。
jQuery(#btn open”).on('click',function(){
$(“#txt”).focus();
var$txt=jQuery(“#txt”);
var caretPos=$txt[0].selectionStart;
var textAreaTxt=$txt.val();
var txtToAdd=“(”;
$txt.val(textAreaTxt.substring(0,caretPos)+txtToAdd+textAreaTxt.substring(caretPos));
});
jQuery(#btn close”).on('click',function(){
$(“#txt”).focus();
var$txt=jQuery(“#txt”);
var caretPos=$txt[0].selectionStart;
var textAreaTxt=$txt.val();
var txtToAdd=“)”;
$txt.val(textAreaTxt.substring(0,caretPos)+txtToAdd+textAreaTxt.substring(caretPos));
});
这对我很有效:)谢谢Pankaj提供的参考链接

function getCaret(el) {
    if (el.prop("selectionStart")) {
        return el.prop("selectionStart");
    } else if (document.selection) {
        el.focus();

        var r = document.selection.createRange();
        if (r == null) {
            return 0;
        }

        var re = el.createTextRange(),
            rc = re.duplicate();
        re.moveToBookmark(r.getBookmark());
        rc.setEndPoint('EndToStart', re);

        return rc.text.length;
    }
    return 0;
};

function appendAtCaret($target, caret, $value) {
    var value = $target.val();
    if (caret != value.length) {
        var startPos = $target.prop("selectionStart");
        var scrollTop = $target.scrollTop;
        $target.val(value.substring(0, caret) + ' ' + $value + ' ' + value.substring(caret, value.length));
        $target.prop("selectionStart", startPos + $value.length);
        $target.prop("selectionEnd", startPos + $value.length);
        $target.scrollTop = scrollTop;
    } else if (caret == 0) {
        $target.val($value + ' ' + value);
    } else {
        $target.val(value + ' ' + $value);
    }
};

$('textarea').each(function() {
    var $this = $(this);
    $this.click(function() {
        //get caret position
        var caret = getCaret($this);

        //append some text
        appendAtCaret($this, caret, 'Some text');
    });
});
<html>
<body>
<textarea id="txt" rows="15" cols="70">There is some text here.</textarea>
<input type="button" id="btn-open" value="(" />
<input type="button" id="btn-close" value=")" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


</body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>
 jQuery("#btn-open").on('click', function() {
 $("#txt").focus();
        var $txt = jQuery("#txt");
        var caretPos = $txt[0].selectionStart;
        var textAreaTxt = $txt.val();
        var txtToAdd = "(";
        $txt.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
    });
    jQuery("#btn-close").on('click', function() {
    $("#txt").focus();
        var $txt = jQuery("#txt");
        var caretPos = $txt[0].selectionStart;
        var textAreaTxt = $txt.val();
        var txtToAdd = ")";
        $txt.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
    });
    </script>
</html>

这里有一些文字。
jQuery(#btn open”).on('click',function(){
$(“#txt”).focus();
var$txt=jQuery(“#txt”);
var caretPos=$txt[0].selectionStart;
var textAreaTxt=$txt.val();
var txtToAdd=“(”;
$txt.val(textAreaTxt.substring(0,caretPos)+txtToAdd+textAreaTxt.substring(caretPos));
});
jQuery(#btn close”).on('click',function(){
$(“#txt”).focus();
var$txt=jQuery(“#txt”);
var caretPos=$txt[0].selectionStart;
var textAreaTxt=$txt.val();
var txtToAdd=“)”;
$txt.val(textAreaTxt.substring(0,caretPos)+txtToAdd+textAreaTxt.substring(caretPos));
});


到目前为止您尝试了什么?检查@PankajMakwana我已经在我的问题中添加了到目前为止我尝试过的内容。根据你的参考链接,我得到了正确的答案。我已经贴了。谢谢:)你刚才把答案加进去了吗?请不要——而是把它作为一个答案(就像其他人一样),如果这个答案比所有其他答案都好,那就接受你自己的答案。这样做没什么错,总比把两者都放在一段文字中制造混乱要好。@PeterB:不,我没有。这就是我之前尝试的代码。我已经用“添加答案”添加了我的答案,您到目前为止尝试了什么?检查@PankajMakwana我已经在我的问题中添加了我到目前为止尝试过的内容。根据你的参考链接,我得到了正确的答案。我已经贴了。谢谢:)你刚才把答案加进去了吗?请不要——而是把它作为一个答案(就像其他人一样),如果这个答案比所有其他答案都好,那就接受你自己的答案。这样做没什么错,总比把两者都放在一段文字中制造混乱要好。@PeterB:不,我没有。这就是我之前尝试的代码。我已经用“添加答案”添加了我的答案,请检查编辑的问题和答案。这不是最优的。我会写一个函数,而不是里面的重复代码。我已经看到了,它很有效-你做得很好!我比你高,就这样吧。这就是你需要的吗?请检查编辑后的问题和答案。这不是最优的。我会写一个函数,而不是里面的重复代码。我已经看到了,它很有效-你做得很好!我比你高,就这样吧。这就是您需要的吗?对于同一个问题,我使用$(textarea).focus()onclick of“(“或”)”来表示您的焦点位于text are中的某些文本中间的情况?如果是,请分享你的小提琴。我的回答可能是错误的。太好了,这是我提到的另一种方式,因为你可以看到你点击按钮前后光标的位置不一样。是的,它会在点击按钮后重新定位它的位置。然而,我无法解决这个问题。如果您知道任何解决方案,请提供帮助:)谢谢!这是不可能的,正如我在回答中提到的:)对于同一个问题,我使用$(textarea.focus()onclick of“(“或”)”来表示您的焦点位于文本中的某个文本的中间?如果是,请分享你的小提琴。我的回答可能是错误的。太好了,这是我提到的另一种方式,因为你可以看到你点击按钮前后光标的位置不一样。是的,它会在点击按钮后重新定位它的位置。然而,我无法解决这个问题。Ple