Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 如何获取元素中的文本以及其中的图像(JQuery)?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何获取元素中的文本以及其中的图像(JQuery)?

Javascript 如何获取元素中的文本以及其中的图像(JQuery)?,javascript,jquery,html,Javascript,Jquery,Html,我希望得到匹配元素集中每个元素的组合文本内容,但其中包含图像 例如,对于此输入: <div id="test">Lorem ipsum <strong>dolor</strong> sit amet, consectetur <a href="...">adipiscing</a> elit: <img src="test.png" alt="test"/> Etiam vulputate arcu risus</di

我希望得到匹配元素集中每个元素的组合文本内容,但其中包含图像

例如,对于此输入:

<div id="test">Lorem ipsum <strong>dolor</strong> sit amet, consectetur <a href="...">adipiscing</a> elit: <img src="test.png" alt="test"/> Etiam vulputate arcu risus</div>
Lorem ipsumdolorsit amet,concetetur elit:Etiam vulputate arcu risus
我希望获得以下输出:

Lorem ipsum dolor sit amet, consectetur adipiscing elit: <img src="test.png" alt="test"/> Etiam vulputate arcu risus
Lorem ipsum dolor sit amet,一位杰出的领导者:一位伟大的领袖

如何使用JQuery来管理它?它几乎与
.text()
函数相同,但我应该以某种方式保留图像。

我相信我有一个简单的解决方案。以下是您可以做的:

var source = $("#test").clone(); //clone your dom element
source.find(':not(img)').remove(); //remove all tags exept img
console.log(source.html()); //Watch result in console
更新:

如果不想删除标记的内容:

$("#test").find("*").not("img").each(function() {
    $(this).replaceWith(this.innerHTML);
});
这是

更新2:

如果您有嵌套元素:

var beginsWith = function(needle, haystack){
    return (haystack.substr(0, needle.length) == needle);
};

var filterHTML = function($elem) {
    var $cp = $elem.clone();

    var changed = true;
    while(changed) {
        var tx1 = $cp.html();
        $cp.contents().each(function() {
            if(this.nodeType === Node.COMMENT_NODE) {
                $(this).remove();
            } else if(this.nodeType == Node.ELEMENT_NODE) {

                if(this.nodeName == 'IMG') {

                    var src = $(this).attr("src");

                    if(
                        !beginsWith("http://",src) &&
                        !beginsWith("https://",src) &&
                        !beginsWith("data:image",src)
                    ) {
                        $(this).remove();
                    }

                } else {
                    $(this).replaceWith(this.innerHTML);
                }

            }

        });
        var tx2 = $cp.html();
        changed = (tx1 != tx2);
    }

    return $cp.html();

};

我相信我有一个简单的解决办法。以下是您可以做的:

var source = $("#test").clone(); //clone your dom element
source.find(':not(img)').remove(); //remove all tags exept img
console.log(source.html()); //Watch result in console
更新:

如果不想删除标记的内容:

$("#test").find("*").not("img").each(function() {
    $(this).replaceWith(this.innerHTML);
});
这是

更新2:

如果您有嵌套元素:

var beginsWith = function(needle, haystack){
    return (haystack.substr(0, needle.length) == needle);
};

var filterHTML = function($elem) {
    var $cp = $elem.clone();

    var changed = true;
    while(changed) {
        var tx1 = $cp.html();
        $cp.contents().each(function() {
            if(this.nodeType === Node.COMMENT_NODE) {
                $(this).remove();
            } else if(this.nodeType == Node.ELEMENT_NODE) {

                if(this.nodeName == 'IMG') {

                    var src = $(this).attr("src");

                    if(
                        !beginsWith("http://",src) &&
                        !beginsWith("https://",src) &&
                        !beginsWith("data:image",src)
                    ) {
                        $(this).remove();
                    }

                } else {
                    $(this).replaceWith(this.innerHTML);
                }

            }

        });
        var tx2 = $cp.html();
        changed = (tx1 != tx2);
    }

    return $cp.html();

};

在另一个答案中,它将删除除img之外的所有元素标记,因此如果您注意到,强元素(dolor)和锚元素(adipising)中的文本将不会显示,请使用此代码,以便获得预期的输出

<div id="test">Lorem ipsum <strong>dolor</strong> sit amet, consectetur <a href="...">adipiscing</a> elit: <img src="test.png" alt="test"/> Etiam vulputate arcu risus</div>
<script>
$(function(){
var $contents = $('#test').contents();
var returnString='';
for(var i=0;i< $('#test').contents().length; i++){
if($contents[i].nodeType == 3)
     returnString = returnString + $contents[i].textContent;
else if($contents[i].nodeType != 3  && $contents[i].nodeName != 'IMG')
    returnString = returnString +   $contents[i].innerHTML;
else
  returnString = returnString +   $contents[i].outerHTML;
}
console.log(returnString);
});
</script>
Lorem ipsumdolorsit amet,concetetur elit:Etiam vulputate arcu risus
$(函数(){
var$contents=$('#test').contents();
var returnString='';
对于(var i=0;i<$('#test').contents().length;i++){
if($contents[i].nodeType==3)
returnString=returnString+$contents[i].textContent;
else如果($contents[i].nodeType!=3&&$contents[i].nodeName!=“IMG”)
returnString=returnString+$contents[i].innerHTML;
其他的
returnString=returnString+$contents[i].outerHTML;
}
console.log(returnString);
});
工作小提琴:


输出:Lorem ipsum dolor sit amet,Concetetur Adipsicing elit:img tag Etiam vulputate arcu risus

在另一个答案中,它将删除除img以外的所有元素标记,因此如果您注意到,将不显示强元素(dolor)和锚元素(Adipsicing)内的文本,使用此代码可以获得预期的输出

<div id="test">Lorem ipsum <strong>dolor</strong> sit amet, consectetur <a href="...">adipiscing</a> elit: <img src="test.png" alt="test"/> Etiam vulputate arcu risus</div>
<script>
$(function(){
var $contents = $('#test').contents();
var returnString='';
for(var i=0;i< $('#test').contents().length; i++){
if($contents[i].nodeType == 3)
     returnString = returnString + $contents[i].textContent;
else if($contents[i].nodeType != 3  && $contents[i].nodeName != 'IMG')
    returnString = returnString +   $contents[i].innerHTML;
else
  returnString = returnString +   $contents[i].outerHTML;
}
console.log(returnString);
});
</script>
Lorem ipsumdolorsit amet,concetetur elit:Etiam vulputate arcu risus
$(函数(){
var$contents=$('#test').contents();
var returnString='';
对于(var i=0;i<$('#test').contents().length;i++){
if($contents[i].nodeType==3)
returnString=returnString+$contents[i].textContent;
else如果($contents[i].nodeType!=3&&$contents[i].nodeName!=“IMG”)
returnString=returnString+$contents[i].innerHTML;
其他的
returnString=returnString+$contents[i].outerHTML;
}
console.log(returnString);
});
工作小提琴:


输出:Lorem ipsum dolor sit amet,Concetetur adipiscing Elite:img tag Etiam vulputate arcu risus

这不会是直接的。您可能最好通过检索textNodes的节点和标记名==
IMG
的DomeElement的outerHTML递归。这不是直接的。您最好通过检索textNodes的节点和标记名==
IMG
的DomeElement的outerHTML递归。谢谢。但是你能解释一下它是如何工作的吗
.remove()
不仅应该删除元素本身,还应该删除其中的所有内容it@IterAtor好了,现在我得到你想要的了。这是UpdateThk you中的另一个解决方案。但是你能解释一下它是如何工作的吗
.remove()
不仅应该删除元素本身,还应该删除其中的所有内容it@IterAtor好了,现在我得到你想要的了。这里是更新中的另一个解决方案